我在Windows上用c ++编程(Visual Studio) 我可以使用std :: mutex或CreateMutex创建互斥锁。 他们之间有什么区别?哪一个我更喜欢哪一个更快?他们是否有任何具体的使用或限制?或者std :: mutex只是一个shell并在里面使用CreateMutex?
答案 0 :(得分:3)
除了std :: mutex是跨平台而且CreateMutex不是另一个区别的事实是WinAPI互斥(通过CreateMutex创建)可以用于不同进程之间的同步,而std :: mutex不能用于那个。从这个意义上讲,std :: mutex更接近于WinAPI Critical Section。
然而,还有其他事情要考虑,例如如果您需要与std :: condition_variable&或与WinAPI事件进行互操作(例如,为了使用WaitForMultipleObjects)。
答案 1 :(得分:2)
std::mutex
由C ++标准库提供,是的,很可能它会在引擎盖下调用CreateMutex
。
由于CreateMutex
不可移植,因此通常首选std::mutex
。
答案 2 :(得分:0)
行为上的差异是Windows下的CreateMutex
创建了一个递归互斥体,而std::mutex
是一个非递归互斥体。您必须使用在C ++ 11中也添加的std::recursive_mutex
。