C ++ std :: mutex和Windows CreateMutex之间有什么区别

时间:2016-04-22 08:25:37

标签: multithreading c++11 multiprocessing mutex

我在Windows上用c ++编程(Visual Studio) 我可以使用std :: mutex或CreateMutex创建互斥锁。 他们之间有什么区别?哪一个我更喜欢哪一个更快?他们是否有任何具体的使用或限制?或者std :: mutex只是一个shell并在里面使用CreateMutex?

3 个答案:

答案 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