我真的不明白你怎么能让一些数据结构无锁。例如,如果你有一个链表,那么要么你用互斥体包围操作,要么如果另一个线程在你忙于将新节点重新链接在一起时执行,你可能会以竞争条件结束。
“无锁”的概念(我很欣赏它并不意味着“无锁”,而是意味着线程可以在不等待其他线程完成的情况下继续前进)只是没有意义。
谁能告诉我一个使用堆栈、队列或链表等实现为“无锁”的简单示例,因为我不明白如何在不干扰其他线程生产力的情况下防止竞争条件?这两个目标肯定相互矛盾吗?
最佳答案
无锁数据结构使用原子操作,可能会提出额外的要求。例如,数据结构可能只对一个读取器和一个写入器线程或任何其他组合是安全的。在简单链表的情况下,将使用对节点指针的原子读写,以保证多个线程可以同时安全地对其进行读写。
您可能会也可能不会逃脱。如果您需要关于数据结构和验证内容的额外保证,如果没有某种形式的高级锁定,您可能无法做到这一点。此外,并非每个数据结构都允许重写为无锁,即使考虑到对如何使用数据结构的额外要求也是如此。在这些情况下,不可变对象(immutable对象)可能是一种解决方案,但它们通常会因复制而带来性能损失,这并不总是比锁定对象然后改变它更可取。
关于c++ - 无锁 C++ 数据结构,不可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22120192/