多线程火车票售票系统——自动重置事件对象实现线程同步
来源:互联网 发布:windows是什么语言 编辑:程序博客网 时间:2024/05/18 21:42
#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int index = 0;
int tickets = 100;
HANDLE g_hEvent; //全局事件对象句柄 如果是进程间,必须用命名的方式,在另外一个进程中,用openevent打开同一个名字的event,返回一个句柄来操作。
void 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);
g_hEvent = CreateEvent(NULL,false,false,NULL); //创建事件对象,第二个参数为false,表示自动重置的。第三个参数false,表示事件对象初始值为无信号。第四个参数NULL,表示匿名的。
SetEvent(g_hEvent); //设置为有信号状态
Sleep(4000); //让主线程放弃执行,不退出。进入等待状态,不占用CPU。
return;
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);//请求事件对象。如果为0,则不会死等,不管有没有信号,都会执行后面的代码。
if (tickets > 0)
{
Sleep(1);
cout<<"thread1 sell tickets:"<<tickets--<<endl;
SetEvent(g_hEvent);
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);//请求事件对象。
if (tickets > 0)
{
Sleep(1);
cout<<"thread2 sell tickets:"<<tickets--<<endl;
SetEvent(g_hEvent);
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}
#include <iostream.h>
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int index = 0;
int tickets = 100;
HANDLE g_hEvent; //全局事件对象句柄 如果是进程间,必须用命名的方式,在另外一个进程中,用openevent打开同一个名字的event,返回一个句柄来操作。
void 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);
g_hEvent = CreateEvent(NULL,false,false,NULL); //创建事件对象,第二个参数为false,表示自动重置的。第三个参数false,表示事件对象初始值为无信号。第四个参数NULL,表示匿名的。
SetEvent(g_hEvent); //设置为有信号状态
Sleep(4000); //让主线程放弃执行,不退出。进入等待状态,不占用CPU。
return;
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);//请求事件对象。如果为0,则不会死等,不管有没有信号,都会执行后面的代码。
if (tickets > 0)
{
Sleep(1);
cout<<"thread1 sell tickets:"<<tickets--<<endl;
SetEvent(g_hEvent);
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);//请求事件对象。
if (tickets > 0)
{
Sleep(1);
cout<<"thread2 sell tickets:"<<tickets--<<endl;
SetEvent(g_hEvent);
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}
- 多线程火车票售票系统——自动重置事件对象实现线程同步
- 多线程火车票售票系统——人工重置事件对象实现线程同步(会有问题的)
- 多线程火车票售票系统——互斥对象实现线程同步
- Java多线程4—线程同步问题+火车票售票系统
- Java多线程4—线程同步问题+火车票售票系统
- 多线程火车票售票系统——临界区实现线程同步
- 多线程实现线程同步——事件对象
- 自动重置事件+临界区实现线程间同步
- 同步与互斥经典案例——模拟火车票售票系统
- 关于多线程实现火车票售票模拟
- 问题: 写一个多线程程序实现铁路卖票系统,4个窗口同时售票,线程同步
- C++多线程操作(火车售票系统线程同步)
- 线程同步—事件对象
- 火车票售票系统
- 简易火车票售票系统
- 多线程编程Demo[利用事件对象实现线程同步]
- windows多线程系列003 利用事件对象实现线程同步
- 如果是你来构建火车票订票系统,你如何实现? ——关于构建安全、稳定、高吞吐量的火车票网络售票系统几个方面
- Alcatel-Lucent 无限制后门
- 什么是好莱坞原则
- 使用网站作为WCF服务宿主的几种做法
- 淘宝客
- SharePoint 上传文档太大 无法上传
- 多线程火车票售票系统——自动重置事件对象实现线程同步
- SharePoint下载大文件失败 异常信息: system.OutOfMemoryException
- MTK Android 编译命令
- 菜菜从零学习WCF十(序列化)
- 屏蔽优酷广告hosts文件设置
- 34 个使用 Raspberry Pi 的酷创意
- 不使用反射,“一行代码”实现Web、WinForm窗体表单数据的填充、收集、清除,和到数据库的CRUD
- poj 3368
- C#- 多个整数的输入