真正的非阻塞并发编程?

时间:2010-11-09 15:23:42

标签: c++ multithreading nonblocking

我一直在阅读关于非阻塞算法的随机链接及其在并发编程中的用法。是否有任何有用的库使用带有C / C ++的非阻塞算法以及哪些类型的并发数据结构从使用非阻塞算法中获益最多?感谢。

2 个答案:

答案 0 :(得分:4)

没有免费锁定这样的东西。所有多线程算法都使用同步。您可以获得不使用显式锁定但依赖于原子操作和其他此类“非锁定”的无锁算法,但实际情况是您必须是一名非常优秀的程序员 - 并且知道您的目标平台和实现细节。目标CPU - 为了编写这样的算法。我知道实际工作的唯一无锁算法是由微软工程师编写的360,他们必须得到设计文档,说明360中的CPU如何实现锁定,然后才能成功。

C ++无锁算法将应用于太多CPU以使这样的事情发挥作用 - 你不能只在boost :: thread上写它。

答案 1 :(得分:1)

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

Windows本身支持通过InitializeCriticalSectionAndSpinCount对关键部分使用旋转计数来尝试优化MP系统上的高争用锁定位。

微软在线程性能方面确实存在宗教信仰,托管代码和本机代码现在都有slimline reader-writer locks

这也为我提供了另一个插入我一直在等待的书的机会,因为它有一个关于这个主题的章节:C++ Concurrency in Action