为什么库在Windows上实现自己的基本锁?

Fir*_*cer 4 c++ windows multithreading synchronization locking

Windows提供了许多用于同步线程的对象,例如事件(带SetEventWaitForSingleObject),互斥锁和关键部分.

我个人总是使用它们,特别是关键部分,因为我很确定它们会产生很小的开销,除非已经锁定.然而,看一些库,比如boost,人们在Windows上使用联锁方法实现自己的锁会遇到很多麻烦.

我可以理解为什么人们会编写无锁队列等等,因为这是一个专门的案例,但是有没有理由让人们选择实现自己版本的基本同步对象?

jal*_*alf 14

库没有实现自己的锁.没有OS支持,这几乎是不可能的.

他们正在做的只是包装操作系统提供的锁定机制.

Boost有以下几个原因:

  • 他们能够利用C++功能提供更好的锁定API.Windows API仅限C,而且设计不是很好.
  • 它们能够提供一定程度的便携性.如果您在Linux计算机或Mac上运行应用程序,则可以使用相同的Boost API.Windows自己的API显然是特定于Windows的.
  • Windows提供的机制有一个明显的缺点:它们要求您包含windows.h,您可能希望避免出于多种原因,尤其是它极端的宏滥用会污染全局命名空间.

  • 互锁方法也是一些Win32同步对象的基础,这就是你真正需要的互斥或选择. (2认同)