gpt4 book ai didi

c++ - Win32 CMutex 与标准库 std::mutex 的比较

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:10 27 4
gpt4 key购买 nike

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

但是,我很好奇标准库之间是否存在性能或功能差异 std::mutexstd::lock_guard<std::mutex>和 Win32 特定的 CMutexCSingleLock .

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

最佳答案

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

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

如果你的问题比较recursive_mutex对比CCriticalSection ,我敢打赌几乎相同的表现。界面方面CSingleLock有完全脑残的界面(它需要第二个参数默认为 FALSE 而不是 TRUE ),所以在实践中我从来没有直接通过宏直接使用它以避免错误。

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

关于c++ - Win32 CMutex 与标准库 std::mutex 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com