码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-08 22:59:57      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

技术分享题目:创建两个线程模拟火车站两个窗口售票程序,窗口售票时间为1秒,两个窗口不能同时售票

#include<Windows.h>
#include<iostream>
using namespace std;
//这是2个线程模拟买火车票的小程序
DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data
DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data


int index = 0;
int tickets = 10;
HANDLE hMutex;
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);
//创建互斥对象
hMutex = CreateMutex(NULL, TRUE, "tickets");
if (hMutex)
{
if (ERROR ALREADY EXISTS == GetLastError())
{
cout << "only one instance can run!" << endl;
return 0;
}
}
WaitForSingleObject(hMutex, INFINITE);
ReleaseMutex(hMutex);
ReleaseMutex(hMutex);
Sleep(4000);
return 0;
}
//线程1的入口函数
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (true)
{
ReleaseMutex(hMutex);
WaitForSingleObject(hMutex, INFINITE);
if (tickets > 0)
{
Sleep(1);
cout << "thread1 sell ticket:" << tickets-- << endl;


}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}


//线程2 的入口函数
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (true)
{
ReleaseMutex(hMutex);
WaitForSingleObject(hMutex, INFINITE);
if (tickets > 0)
{
Sleep(1);
cout << "thread2 sell ticket:" << tickets-- << endl;


}
else
break;
ReleaseMutex(hMutex);
}
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:

原文地址:http://blog.csdn.net/wangfengfan1/article/details/47361971

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!