线程同步之临界区(类比互斥对象进行分析)
来源:互联网 发布:易知投资有限责任公司 编辑:程序博客网 时间:2024/06/04 18:08
先来复习两个简单的英语单词吧:
critical : 临界的;关键的
section: 区域;区段
所以critical section可以翻译为临界区,也可以翻译为关键代码段,我个人倾向于前者。
会拉屎的人,一定会利用临界区来实现线程同步。
下面,我将介绍利用临界区来实现线程同步。什么是临界区呢?临界区好比一个厕所的槽位,有人在里面,你就不能进入。我发现,每天早上八九点种的时候,厕所的每一个槽位基本都是满的,想拉屎,总是要等,哎,临界区的设计真是太有生活哲理了,还是那句话:大道至简,Everything should be made as simple as possible.
还是售票系统,依然是直接上代码:
#include <windows.h>#include <iostream.h>DWORD WINAPI Fun1Proc(LPVOID lpParameter);DWORD WINAPI Fun2Proc(LPVOID lpParameter);int tickets = 100;CRITICAL_SECTION g_cs;int main(){HANDLE hThread1;HANDLE hThread2;hThread1 = CreateThread(NULL, 0, Fun1Proc, NULL, 0, NULL);hThread2 = CreateThread(NULL, 0, Fun2Proc, NULL, 0, NULL);CloseHandle(hThread1);CloseHandle(hThread2);// 初始化临界区InitializeCriticalSection(&g_cs);Sleep(4000);// 销毁临界区DeleteCriticalSection(&g_cs);return 0;}DWORD WINAPI Fun1Proc(LPVOID lpParameter){while(1){// 等待调用线程获得临界区所有权(类似于WaitForSingleObject)EnterCriticalSection(&g_cs);if(tickets > 0){Sleep(1);cout << "thread1 sell ticket : " << tickets-- << endl;LeaveCriticalSection(&g_cs); // 离开临界区(类似于释放互斥对象)}else{break;}}return 0;}DWORD WINAPI Fun2Proc(LPVOID lpParameter){while(1){// 等待调用线程获得临界区所有权(类似于WaitForSingleObject)EnterCriticalSection(&g_cs);if(tickets > 0){Sleep(1);cout << "thread2 sell ticket : " << tickets-- << endl;LeaveCriticalSection(&g_cs); // 离开临界区(类似于释放互斥对象)}else{break;}}return 0;}
- 线程同步之临界区(类比互斥对象进行分析)
- 线程同步之事件对象(类比互斥对象进行分析)
- 线程同步-临界区、互斥对象、事件对象区别
- 线程同步的三种方法(互斥,事件,临界区) 之三 使用事件对象
- 线程同步的三种方法(互斥,事件,临界区) 之二 使用互斥对象
- 临界区实现线程同步互斥
- 线程同步的三种方法(互斥,事件,临界区) 之一 使用临界区对象
- Delphi线程同步(临界区、互斥、信号量)
- 线程同步与临界区对象、互斥对象、事件对象
- 四种进程或线程同步互斥的方法:临界区、互斥对象、事件对象、信号量
- Windows线程同步之临界区对象(Critical Section)
- 线程同步机制有临界区、互斥、信号量优缺点
- 进程、线程同步互斥学习 —— 临界区
- 线程的创建、管理 与 使用信号灯、互斥量、临界区、事件进行线程同步或互斥
- 多线程同步方法:临界区、事件、信号量、互斥对象
- 线程同步-临界区对象
- 线程同步-临界区对象
- Windows多线程程序设计之线程同步分析(结合互斥对象)(上)
- 腾讯2013校招技术类笔试题
- 如何驱动一款USB设备
- BitMap的java实现
- spoj AMR11 Robbing Gringotts 双边暴力+hash+费用流
- EPP编写代码浏览器无法打开问题
- 线程同步之临界区(类比互斥对象进行分析)
- UVa 11264 Coin Collector (选硬币&贪心好题)
- HDOJ, 杭电2050折线分割平面
- JavaSwing图形界面编程之自定义类(一)
- 解决ok6410 uboot下ping不通的问题
- c\c++复习基础要点10---智能指针
- ADO.NET
- 调查问卷录入spss
- js异步加载