Win32 CMutex与标准库std::mutex的比较
Comparison of Win32 CMutex and Standard Library std::mutex
自从在c++ 11中引入thread
库以来,我一直在检查我的代码,做一些更改,将其从特定平台的多线程代码移到可移植的标准库代码。
然而,我很好奇标准库std::mutex
和std::lock_guard<std::mutex>
与Win32特定的CMutex
和CSingleLock
之间是否存在性能或功能差异。
我没有分析多线程代码的经验,我不知道这两个互斥锁类中的任何一个的内部结构,所以我甚至不能冒险猜测。
功能差异是肯定的——CMutex
直接映射到Win32互斥锁类型,而std::mutex
更基本,可能使用Win32 CRITICAL_SECTION
来实现递归性质和std::recursive_mutex
包装CRITICAL_SECTION
。它们的工作原理类似于CCriticalSection
。
CMutex
是一个重量级对象,在实践中用于创建进程间通信的命名互斥体。你不应该在进程中使用它。
如果你的问题是比较recursive_mutex
和CCriticalSection
,我敢打赌几乎相同的性能。接口方面,CSingleLock
有一个完全脑残的接口(它接受第二个参数,默认为FALSE
而不是TRUE
),所以在实践中,我从来没有直接使用它,只是通过宏来避免错误。
在新代码中,我首先尝试使用std::future
来解决问题,并且只有在最后才会使用锁。c++ 11线程的使用非常有意义,所以在您需要CMultiLock
功能之前,它是更好的。我还没有研究如何覆盖后一种情况,但如果它不容易做到,我会感到惊讶。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 比较字符数组
- 将模板化的类型与C++中的某些类/类型进行比较
- C++自定义比较函数
- 如何比较自定义类的std::变体
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- std::设置自定义比较器
- 布尔比较运算符是如何在C++中工作的
- C++将目录中的所有文件与::filesystem进行比较
- shell排序中的交换和比较
- 如何在C++中比较两个char数组
- catch框架有没有办法比较流或文件
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 智能指针作为无序映射键,并通过引用进行比较
- 比较if语句中的数组值和int值
- 对于循环变体比较
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- Win32 CMutex与标准库std::mutex的比较