非阻塞并发编程真的存在吗?

3

我一直在阅读关于非阻塞算法及其在并发编程中的应用的随机链接。 有没有使用C/C++非阻塞算法的有用库以及哪些类型的并发数据结构最受非阻塞算法的好处?谢谢。

2个回答

4
没有免费的锁。所有多线程算法都使用同步。您可以获得不使用显式锁定但依赖于原子操作和其他“非锁定”操作的无锁算法,但实际情况是,您必须成为一位非常优秀的程序员,并了解目标平台和目标CPU的实现细节,才能编写这样的算法。我知道的唯一可行的无锁算法是由微软工程师编写的360算法,他们必须获得360 CPU实现锁定的设计文档,才能成功。
一个C ++无锁算法将应用于太多的CPU,使得这样的事情行不通 - 您不能仅在boost :: thread之上编写它。

@DeadGMG 感谢您的回复。我想您是在谈论像CMPXCHG这样的指令,它是英特尔处理器的一部分吗? - Fanatic23
@Fanatic:而且你还必须明确地了解它们的工作原理。 - Puppy

1

boost::thread 在 Windows 上使用比较和交换语义来处理 shared_mutex,只有在发生争用时才会进行阻塞调用(使用信号量)。

Windows 本身支持对关键段使用自旋计数(spin count),通过 InitializeCriticalSectionAndSpinCount 尝试在 MP 系统上优化高争用锁的一些位。

微软真正关注了线程性能,管理和本机代码现在都有 轻量级读写锁

这也给了我另一个机会推荐一本我一直在等待的书,因为它有一章专门讲解这个主题:C++ Concurrency in Action


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接