相关疑难解决方法(0)

用于.NET的无锁和线程安全IList <T>

是否存在实现IList的无锁且线程安全的数据结构?

当然,无锁是指一种实现,它不使用.NET中的锁定原语,而是使用互锁操作/原子操作来实现线程安全......没有一个,显然在并发数据结构下......

有没有人见过一个漂浮?

我见过一个用氨基-cbbs实现的java 文件,名为LockFreeVector但到目前为止还没有用于.NET.有任何想法吗?

.net multithreading ilist structure lock-free

14
推荐指数
2
解决办法
3784
查看次数

使链接列表线程安全

我知道之前已经问过这个问题(我将继续研究),但我需要知道如何以线程安全的方式创建特定的链表功能.我当前的问题是我有一个循环遍历链表中所有元素的线程,另一个可能会在此列表的末尾添加更多元素.有时会发生这样的情况:一个线程尝试将另一个元素添加到列表中,而第一个元素正忙于迭代它(这会导致异常).

我想只是添加一个变量(布尔标志)来表示列表当前正在忙于迭代,但是我如何检查它并等待第二个线程(如果它等待,则可以,因为第一个线程运行很快).我能想到的唯一方法是通过使用while循环不断检查这个忙碌的标志.我意识到这是一个非常愚蠢的想法,因为它会导致CPU在没有任何用处的情况下努力工作.现在我在这里要求更好的见解.我已经阅读了关于锁等等,但它似乎与我的情况无关,但也许我错了?

与此同时,如果我找到解决方案,我将继续搜索互联网并发回.

编辑:让我知道我是否应该发布一些代码来清理,但我会尝试更清楚地解释它.

所以我有一个带有链表的类,其中包含需要处理的元素.我有一个线程通过函数调用遍历此列表(让我们称之为"processElements").我有第二个线程,以非确定的方式添加元素进行处理.但是,有时它会在processElements运行时尝试调用此addElement函数.这意味着当一个元素被第一个线程迭代时,它被添加到链表中.这是不可能的,并导致异常.希望这清除它.

我需要添加新元素的线程,直到processElements方法执行完毕.

  • 对任何绊倒这个问题的人.接受的答案将为您提供快速,简单的解决方案,但请查看下面的Brian Gideon的答案,以获得更全面的答案,这肯定会给您更多的见解!

c# multithreading

8
推荐指数
2
解决办法
7102
查看次数

标签 统计

multithreading ×2

.net ×1

c# ×1

ilist ×1

lock-free ×1

structure ×1