为Windows增强Mutex实现

nog*_*ard 5 c++ windows multithreading boost

据我所知,旧版本的Boost boost::mutex实现Windows是使用关键部分完成的.但在最新版本的Boost 1.51中,我发现现在互斥实现基于事件.

有谁知道这种变化背后的理性是什么?它是否因性能原因而完成?关键部分是否已被弃用?

Big*_*oss 5

通过使用boost我们总是拥有最好的方法而没有变化,这不是很好吗?在新版本中boost,boost::mutex实现为自旋锁,但在Windows事件的帮助下,以避免繁忙的等待,并且该事件将仅在需要时创建,因此它非常轻,并且具有非常高的性能并且还能够boost使用此灯mutex定时等待的重量!我觉得这很棒

  • 你几乎是正确的,但实际上`boost :: mutex`根本不使用自旋锁!它使用原子操作作为优化:当获取锁时,它将首先(原子地)检查一个变量,该变量告知互斥锁当前是否被锁定.如果没有锁定,那么它可以继续(根本不需要考虑win32事件),这就是快速路径.如果检查说互斥锁被锁定,那么(更多)昂贵的win32东西就会发挥作用.但这里根本没有旋锁;-) (2认同)