- #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;
- }
用临界区实现互斥资源的访问
最新推荐文章于 2025-02-22 01:21:41 发布
本文演示了如何使用Windows API中的临界区(CRITICAL_SECTION)来实现两个线程间的资源同步,确保共享资源(如售票过程)的正确性和线程安全。通过创建和初始化临界区对象,并在访问共享资源前调用EnterCriticalSection和访问后调用LeaveCriticalSection,有效地防止了资源竞争。
2279

被折叠的 条评论
为什么被折叠?



