- #include <windows.h>
- #include <iostream>
- int tickets=100;
- DWORD WINAPI fun1Proc(LPVOID lpParameter);
- DWORD WINAPI fun2Proc(LPVOID lpParameter);
- //创建一个临界区
- CRITICAL_SECTION g_cs;
- int main()
- {
- HANDLE hThread1,hThread2;
- //初始化临界区
- InitializeCriticalSection(&g_cs);
- hThread1 = CreateThread(NULL,0,fun1Proc,NULL,0,NULL);
- hThread2 = CreateThread(NULL,0,fun2Proc,NULL,0,NULL);
- CloseHandle(hThread1);
- CloseHandle(hThread2);
- Sleep(4000);
- DeleteCriticalSection(&g_cs);
- return 0;
- }
- DWORD WINAPI fun1Proc(LPVOID lpParameter)
- {
- while(true)
- {
- //进入临界区
- EnterCriticalSection(&g_cs);
- if(tickets)
- {
- std::cout<<"Thread1 selled ticket "<<tickets--<<std::endl;
- }
- else
- {
- break;
- }
- //离开临界区
- LeaveCriticalSection(&g_cs);
- }
- return 0;
- }
- DWORD WINAPI fun2Proc(LPVOID lpParameter)
- {
- while(true)
- {
- EnterCriticalSection(&g_cs);
- if(tickets)
- {
- std::cout<<"Thread2 selled ticket "<<tickets--<<std::endl;
- }
- else
- {
- break;
- }
- LeaveCriticalSection(&g_cs);
- }
- return 0;
- }
用临界区实现互斥资源的访问
最新推荐文章于 2023-04-01 12:01:50 发布