C++之线程信号量机制

来源:互联网 发布:标题优化免费软件 编辑:程序博客网 时间:2024/05/16 06:17
#include<iostream>#include<Windows.h>using namespace std;int tickets=100;         //火车票总数HANDLE hSemaphore;DWORD WINAPI Thread1Proc(LPVOID lpParameter);//进程函数DWORD WINAPI Thread2Proc(LPVOID lpParameter);//进程函数void main(){HANDLE hThread1;HANDLE hThread2;hThread1=CreateThread(NULL,0,Thread1Proc,NULL,0,NULL);   //创建线程hThread2=CreateThread(NULL,0,Thread2Proc,NULL,0,NULL);hSemaphore=CreateSemaphore(NULL,1,1,NULL);      //创建信号量,初始为1,最多为1CloseHandle(hThread1);       //释放句柄CloseHandle(hThread2);CloseHandle(hSemaphore);while(TRUE){WaitForSingleObject(hSemaphore,INFINITE);if(tickets>0){cout<<"主线程卖出第"<<tickets--<<"张票"<<endl;Sleep(50);ReleaseSemaphore(hSemaphore,1,NULL);}else{ReleaseSemaphore(hSemaphore,1,NULL);      //释放信号量资源break;}}ExitThread(0);}DWORD WINAPI Thread1Proc(LPVOID lpParameter){while(TRUE){WaitForSingleObject(hSemaphore,INFINITE);//申请信号量    if(tickets>0)    {   cout<<"线程一卖掉第"<<tickets--<<"张票"<<endl;   Sleep(50);   ReleaseSemaphore(hSemaphore,1,NULL);    }    else{ReleaseSemaphore(hSemaphore,1,NULL);break;}}return 0;}DWORD WINAPI Thread2Proc(LPVOID lpParameter){while(TRUE){WaitForSingleObject(hSemaphore,INFINITE);if(tickets>0){cout<<"线程二卖出第"<<tickets--<<"张票"<<endl;Sleep(50);ReleaseSemaphore(hSemaphore,1,NULL);}else{ReleaseSemaphore(hSemaphore,1,NULL);break;}}return 0;}

0 0
原创粉丝点击