创建两个线程模拟火车站两个窗口售票程序

#include <Windows.h>
#include <iostream>
using namespace std;

DWORD WINAPI Fun1(LPVOID lpParameter);

DWORD WINAPI Fun2(LPVOID lpParameter);


int index = 0;
int tickets = 100;  
HANDLE hMutex;
int main()
{
 HANDLE hThread1;
 HANDLE hThread2;

 hThread1 = CreateThread(NULL,0,Fun1,NULL,0,NULL);
 hThread2 = CreateThread(NULL,0,Fun2,NULL,0,NULL);
 CloseHandle(hThread1);  
 CloseHandle(hThread2);

 hMutex=CreateMutex(NULL, FALSE, "tickets");//申请一个名为tickets的互斥资源且不属于当前线程
 //WaitForSingleObject(hMutex, INFINITE);
 //ReleaseMutex(hMutex);

//或
/*  hMutex=CreateMutex(NULL, TRUE, "tickets");<span style="font-family: Arial, Helvetica, sans-serif;">//申请一个名为tickets的互斥资源且属于当前线程,要释放后该互斥资源,其他线程才能用</span>
 WaitForSingleObject(hMutex, INFINITE);
 ReleaseMutex(hMutex);
 ReleaseMutex(hMutex); */
 Sleep(400000); //主线程挂起400秒,先去执行子线程
 return 0;
}

DWORD WINAPI Fun1(LPVOID lpParameter)
{
 while (TRUE)
 {
  ReleaseMutex(hMutex);
  WaitForSingleObject(hMutex, INFINITE);
  if (tickets > 0)
  {
   Sleep(1000);
   cout<<"thread1 sell ticket : "<<tickets--<<endl;
  }
  else
  {
   break;
  }
  ReleaseMutex(hMutex);
 }
 return 0;
}


DWORD WINAPI Fun2(LPVOID lpParameter)
{
 while (TRUE)
 {
  ReleaseMutex(hMutex);
  WaitForSingleObject(hMutex, INFINITE);
  if (tickets > 0)
  {
   Sleep(1000);
   cout<<"thread2 sell ticket : "<<tickets--<<endl;
  }
  else
  {
   break;
  }
  ReleaseMutex(hMutex);
 }
 return 0;
}

发布了4 篇原创文章 · 获赞 6 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章