4

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

但是,我很想知道标准库std::mutexstd::lock_guard<std::mutex>特定于 Win32的CMutex和之间是否存在性能或功能差异CSingleLock

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

4

1 回答 1

5

功能尊重是肯定的 -CMutex直接映射到 Win32 互斥体类型,而std::mutex更基本,可能使用 win32 实现,CRITICAL_SECTION消除递归性质和std::recursive_mutex包装CRITICAL_SECTION。这些将类似于CCriticalSection.

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

如果你的问题是比较recursive_mutexvs CCriticalSection,我敢打赌几乎相同的表现。Interface-wiseCSingleLock具有完全无脑的接口(它需要第二个参数,默认为FALSE而不是TRUE),因此在实践中我从未仅通过宏直接使用它以避免错误。

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

于 2013-05-31T11:10:37.853 回答