线程同步使用方法:CMutex_CEvent_关键代码段
来源:互联网 发布:cpi数据分析 编辑:程序博客网 时间:2024/05/21 10:18
《WIndows核心编程》机械工艺出版社:深入的了解多线程和线程同步的问题
3个的使用范围:
1. CMutex、CEvent、关键代码段
CMutex、CEvent:属于内核对象,速度比较慢,但可以拥有跨进程的线程同步
关键代码段:工作于用户方式下,同步速度快,可能会造成死锁,不能拥有跨进程同步
1. CEvent
1.1 CEvent g_event=CreateEvent(NULL,TRUE,FALSE,NULL);
第二个参数表示:是否人工重置,若为TRUE,则必须人工调用ResetEvent进行重置,这样也不能实现多线程的同步,所以建议为FALSE,让它自动重置。
1.2 正常的使用方法
全局变量:CEvent g_event;
主线程中:
g_event=CreateEvent(NULL,FALSE,FALSE,NULL); //第二个参数表示自动该事件对象重置
SetEvent(g_event); //将g_event置为有信号
子线程中:
WaitForSingleObject(g_event,INFINITE); //将g_event置为无信号
//要保护的代码
SetEvent(g_event); //将g_event置为有信号
2. 关键代码段(适用于多个关键代码段的情形,即有多个要保护的资源,但这样可能会造成死锁)
2.1 全局变量:CRITICAL_SECTION g_cs;
主线程中:(注意时间)
InitializeCriticalSection(&g_cs);
Sleep(4000);
DeleteCriticalSection(&g_cs);
子线程中:
EnterCriticalSection(&g_cs);
LeaveCriticalSection(&g_cs);
3. CMutex
3.1 全部变量:HANDLE hMutex;
主线程中:hMutex=CreateMutex(NULL,FALSE,NULL);//第二个参数为FALSE表示当前主线程不拥有该信号量,若为TRUE,在主线程里的数据执行完,需要调用ReleaseMutex(hMutex),否则子线程将不能拥有。
子线程中:
WaitForSingleObject(hMutex,INFINITE); //将g_event置为无信号
ReleaseMutex(hMutex);
- 线程同步使用方法:CMutex_CEvent_关键代码段
- 线程同步--关键代码段
- 利用关键代码段实现线程同步
- 使用关键代码段实现线程同步
- -【用户方式线程同步】关键代码段
- 线程同步--关键代码段(一)
- 线程同步--关键代码段(二)
- 线程同步--关键代码段(三)
- 关键代码段实现线程同步
- 使用关键代码段实现线程同步
- 利用关键代码段实现线程同步
- 线程同步之关键代码段
- 利用关键代码段实现线程同步
- 线程同步之关键代码段
- 利用关键代码段(临界区)实现线程同步
- 线程同步二:关键段
- 线程同步--关键段CRITICAL_SECTION
- 线程同步之关键段
- 1.2 css的引入方法
- Java学习笔记之线程的生命周期
- 共享收集的图像处理方面的一些资源和网站。
- SQL Server 知识梳理七 程序设计
- 为什么IIS的应用池回收设置默认为1740分钟
- 线程同步使用方法:CMutex_CEvent_关键代码段
- MySql安装及导入导出
- centos FTP服务器的架设和配置
- iPhone网易新闻和凤凰新闻客户端
- 实例分析Java Class的文件结构
- 3年flash游戏开发小结
- 杭电2674
- 移动互联网的跨平台时代
- GenomePixelizer使用总结