Win32 CMutex和标准库std :: mutex的比较

时间:2013-05-31 10:35:03

标签: c++ winapi c++11 mutex standard-library

自从在C ++ 11中引入thread库以来,我一直在通过我的代码进行一些更改,将其从特定于平台的多线程代码转移到可移植的标准库代码。

但是,我很感兴趣标准库std::mutexstd::lock_guard<std::mutex>以及特定于Win32的CMutexCSingleLock之间是否存在性能或功能差异。

我没有使用多线程代码进行分析的经验,而且我不知道两个互斥锁类中任何一个的内部结构,所以我甚至无法猜测。

1 个答案:

答案 0 :(得分:5)

功能尊重是肯定的 - CMutex直接映射到Win32互斥锁类型,而std::mutex更基本,可能使用win32 CRITICAL_SECTION删除递归性质std::recursive_mutex包裹CRITICAL_SECTION。这些工作类似于CCriticalSection

CMutex是一个重量级,实际上用于创建进程间通信的命名互斥锁。你不应该在进程内使用它。

如果您的问题与recursive_mutexCCriticalSection进行比较,我会打赌几乎相同的表现。界面方式CSingleLock具有完全脑interface界面(它需要第二个参数,默认为FALSE而不是TRUE),所以在实践中我从未直接使用它直接通过宏来避免错误。

在新代码中,我首先尝试使用std::future来解决问题,并且仅作为最后手段使用锁。 C ++ 11线程使用非常合理,因此在您需要CMultiLock功能之前,它会更好。我还没有探讨如何涵盖后一种情况,但如果不能轻易做到就会感到惊讶。