【问题标题】:is non-blocking concurrent programming for real?非阻塞并发编程是真的吗?
【发布时间】:2011-05-07 07:48:24
【问题描述】:

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

【问题讨论】:

    标签: c++ multithreading nonblocking


    【解决方案1】:

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

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

    【讨论】:

    • @DeadGMG 感谢您的回复。我猜你说的是英特尔处理器中的 CMPXCHG 之类的指令?
    • @Fanatic:你还必须明确了解它们的工作原理。
    【解决方案2】:

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

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

    Microsoft 真的很重视线程性能,现在托管代码和本机代码都有 slimline reader-writer locks

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

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 2018-11-15
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 2015-11-06
      相关资源
      最近更新 更多