C++多线程之使用Mutex和Critical_Section
来源:互联网 发布:电气硬件 软件是什么 编辑:程序博客网 时间:2024/06/03 21:14
CRITICAL_SECTION只能用于不同线程的互斥,而不能用于同步。因为同一个线程可以多次EnterCriticalSection。。 为什么网上的代码,很多“锁”、“自动锁”的类,都是用CRITICAL_SECTION实现。 如果使用的人不熟悉这个,很容易就会用错呀。
C++多线程之使用Mutex和Critical_Section
Mutex和Critical Section都是主要用于限制多线程(Multithread)对全局或共享的变量、对象或内存空间的访问。下面是其主要的异同点(不同的地方用绿色表示)。
Mutex
Critical Section #include <windows.h>
性能和速度
慢。
Mutex 是内核对象,相关函数的执行 (WaitForSingleObject,
ReleaseMutex)需要用户模式(User Mode)到内核模式
(Kernel Mode)的转换,在x86处理器上这种转化一般要
发费600个左右的 CPU指令周期。
快。
Critical Section本身不是内核对象,相关函数
(EnterCriticalSection,LeaveCriticalSection)
的调用一般都在用户模式内执行,在x86处理器上
一般只需要发费9个左右的 CPU指令周期。只有
当想要获得的锁正好被别的线程拥有时才会退化
成和Mutex一样,即转换到内核模式,发费600个
左右的 CPU指令周期。
能否跨越进程(Process)边界
可以
不可
定义写法
HANDLE hmtx;
CRITICAL_SECTION cs;
初始化写法
hmtx= CreateMutex (NULL, FALSE, NULL);
InitializeCriticalSection(&cs);
结束清除写法
CloseHandle(hmtx);
DeleteCriticalSection(&cs);
无限期等待的写法
WaitForSingleObject (hmtx, INFINITE);
EnterCriticalSection(&cs);
0等待(状态检测)的写法
WaitForSingleObject (hmtx, 0);
TryEnterCriticalSection(&cs);
任意时间等待的写法
WaitForSingleObject (hmtx, dwMilliseconds);
不支持
锁释放的写法
ReleaseMutex(hmtx);
LeaveCriticalSection(&cs);
- C++多线程之使用Mutex和Critical_Section
- C++多线程之使用Mutex和Critical_Section
- C++多线程之使用Mutex和Critical_Section
- C++多线程之使用Mutex和Critical_Section
- C++多线程之使用Mutex和Critical_Section
- c++多线程编程中Mutex和Critical_Section的区别
- 跨平台的多线程互斥访问控制(Mutex和Critical_Section)
- C# 多线程系列之Mutex使用
- 线程同步问题,CRITICAL_SECTION和Mutex哪个更快
- 多线程同步之CRITICAL_SECTION(临界区)
- 关于多线程与CRITICAL_SECTION的使用
- C++多线程之Mutex
- 多线程之互斥量mutex
- QNX多线程之Mutex
- 多线程之Mutex(互斥量)
- linux多线程之mutex
- Mutex与CRITICAL_SECTION的比较
- 线程同步:CRITICAL_SECTION, Mutex , Event
- jdk1.8 ConcurrentHashMap
- xUtils3带进度条下载(切换界面不会中断下载)
- 基于ubuntu14.04 cuda7.5 cudnn5.1caffe 配置
- android解码判断H264的I帧
- 前台页面优化全攻略(四)
- C++多线程之使用Mutex和Critical_Section
- Java资源
- 使用Android Studio 过程中遇到的问题
- RHEL7虚拟机与主机设置共享文件
- 左右无缝滚动
- Effective C++ 第3条:尽可能使用const
- ios developer tiny share-20160929
- DrawRect
- Oracle replace