c# - 是否可以使用无锁(等待)双向链表?

标签 c# thread-safety locking lock-free interlocked

用C#标签问这个问题,但如果可以的话,用任何语言都应该可以。

是否可以使用互锁操作实现双向链表以提供无等待锁定?我希望无需等待即可插入、添加和删除以及清除。

最佳答案

是的,这是可能的,这是我对类似 STL 的实现 Lock-Free Doubly-Linked List在 C++ 中。

Sample code that spawns threads to randomly perform ops on a list

它需要 64 位比较和交换才能在没有 ABA 问题的情况下运行。此列表仅可能是因为 lock-free memory manager .

查看 benchmarks on page 12 .随着竞争的增加,列表的性能与线程数成线性关系。该算法支持不相交访问的并行性,因此随着列表大小的增加,争用可以减少。

关于c# - 是否可以使用无锁(等待)双向链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849786/

相关文章:

Java 线程安全延迟初始化

Java多线程,让一个线程等待另一个线程,或者加入不同的线程

C# 线程 - 以线程安全的方式使用类与以线程安全的方式实现它

opengl - 你如何使用glm quat防止万向节锁定

java - HttpURLConnection 被锁定

java - 获取多个锁时发生死锁

c# - 这个 IDisposable 实现是否正确?

c# - 替换 c# 中的 try...catch block

c# - 中止请求时 IIS/C# 中会发生什么

c# - 正则表达式用于删除逗号周围的空格(引用时除外)