【发布时间】:2011-05-07 07:48:24
【问题描述】:
我一直在阅读有关非阻塞算法及其在并发编程中的使用的随机链接。是否有任何有用的库在 C/C++ 中使用非阻塞算法以及哪些类型的并发数据结构从使用非阻塞算法中受益最大?谢谢。
【问题讨论】:
标签: c++ multithreading nonblocking
我一直在阅读有关非阻塞算法及其在并发编程中的使用的随机链接。是否有任何有用的库在 C/C++ 中使用非阻塞算法以及哪些类型的并发数据结构从使用非阻塞算法中受益最大?谢谢。
【问题讨论】:
标签: c++ multithreading nonblocking
没有免费锁这样的东西。所有多线程算法都使用同步。您可以获得不使用显式锁但依赖原子操作和其他此类“非锁”的无锁算法,但现实是您必须是一个非常优秀的程序员 - 并且了解您的目标平台和实现细节目标 CPU - 为了编写这样的算法。我所知道的唯一真正有效的无锁算法是为 360 编写的,由微软工程师编写,他们必须获得 360 中的 CPU 如何实现锁定的设计文档,然后才能成功。
C++ 无锁算法将应用于太多的 CPU 以使这样的事情工作 - 你不能只在 boost::thread 之上编写它。
【讨论】:
boost::thread 在 Windows 上对shared_mutex 使用比较和交换语义 - 仅当发生争用时才会进行阻塞调用(使用信号量)。
Windows 本身支持通过 InitializeCriticalSectionAndSpinCount 对关键部分使用旋转计数,以尝试针对 MP 系统上的高争用锁优化一点。
Microsoft 真的很重视线程性能,现在托管代码和本机代码都有 slimline reader-writer locks。
这也给了我另一个机会来插入一本我一直在等待的书,因为它有一个关于这个主题的章节:C++ Concurrency in Action。
【讨论】: