并行开发笔记-3.使用互斥元(临界区)保护
来源:互联网 发布:成都中科大cms漏洞 编辑:程序博客网 时间:2024/05/16 02:16
互斥元(Mutex)也就是锁
保护一段资源只许拥有锁的线程或进程去访问
**WaitForSingleObject(hMutex, INFINITE); //互斥锁保护的部分 ...... ReleaseMutex(hMutex);**
注意互斥锁的名称要对上[本文是这玩意儿 _T(“MAIN_MUTEX“)]
简单思路图
//使用互斥元保护class ThreadTest3{public: static int main(int argc, char** argv) { ThreadTest3 td; td.RUN(); return 1; };public: void RUN(void) { //CreateMutex 第二个参数为TRUE时主线程立即占有互斥元锁 //这里FALSE 创建了互斥元后可以用WaitForSingleObject去抢占了 HANDLE hMutex = CreateMutex(NULL, FALSE, _T("__MAIN_MUTEX__")); HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadStart, NULL, 0, NULL); //Sleep(100); //这里最好加个Sleep防止被下面的WaitForSingleObject先抢了 cout << "Waiting execution..." << endl; //主线程等待锁 自然就会阻塞线程直到完成了 WaitForSingleObject(hMutex, INFINITE); ReleaseMutex(hMutex); CloseHandle(hMutex); CloseHandle(hThread); cout << "Threadend..." << endl; }; static DWORD ThreadStart(LPVOID lpParameter) { HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, _T("__MAIN_MUTEX__")); //抢锁咯 抢到就往下过不然就抢到死等INFINITE WaitForSingleObject(hMutex, INFINITE); cout << "ThreadStart..." << endl; for (int i = 1; i <= 20; i++) { cout << i << " "; Sleep(100); } cout << endl; for (int i = 1; i <= 20; i++) { cout << i << " "; Sleep(100); } cout << endl; //完事了解锁 其他线程有能在WaitForSingleObject抢锁咯 ReleaseMutex(hMutex); return 0; };};
程序输入:(和之前一样)
Waiting execution…
ThreadStart…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Threadend…
然后闪退!因为主线程没有消息循环阻塞!
阅读全文
0 0
- 并行开发笔记-3.使用互斥元(临界区)保护
- CriticalSection 临界区保护
- Boost锁~临界区保护和临界资源共享
- code技巧之临界区保护
- 对信号量的临界区保护
- 使用临界区CRITICAL_SECTION结构对象保护多线程互斥地访问共享资源
- 临界区的使用
- 临界区的使用
- 临界区使用问题
- 并行计算—OpenMP—临界区critical
- 并行计算—OpenMP—临界区方法求和
- OpenMP对临界区/变量的保护方法
- 进程同步--临界区保护(1)_轮转法
- 对临界区的使用
- 多线程临界区的使用
- VC 多线程使用临界区
- c++临界区的使用
- 使用临界区(Critical sections)给临界资源加锁
- hdu 1754 I Hate It【线段树入门+模板详解】
- 16-Vue事件处理
- acm 快速排序
- 在hadoop集群上安装hive和mysql
- 以当前学习进度判断命令执行优先级!
- 并行开发笔记-3.使用互斥元(临界区)保护
- android中RGB颜色查询对照表
- 环境配置-mysql安装
- Node--Sequlize搭建服务
- 1002. 写出这个数
- App复活
- python dict 和set 详解
- 解决Maven的Could not calculate build plan的方法
- Marvell ESPRESSObin从NFS启动Linux