线程同步的三种方法(互斥,事件,临界区) 之三 使用事件对象
来源:互联网 发布:大学解题软件 编辑:程序博客网 时间:2024/04/29 12:31
#include <windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int tickets=100;
HANDLE g_hEvent;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
//**************************************************
//创建一个命名的自动重置事件内核对象
g_hEvent=CreateEvent(NULL,FALSE,FALSE,LPCWSTR("tickets"));
if (g_hEvent)
{
if (ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only one instance can run!"<<endl;
return;
}
}
//**************************************************
SetEvent(g_hEvent);
//创建线程
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
Sleep(40000);
//关闭事件对象句柄
CloseHandle(g_hEvent);
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket :"<<tickets--<<endl;
SetEvent(g_hEvent);
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets>0)
{
cout<<"Thread2 sell ticket :"<<tickets--<<endl;
SetEvent(g_hEvent);
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}
#include <iostream>
using namespace std;
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
DWORD WINAPI Fun2Proc(LPVOID lpParameter);
int tickets=100;
HANDLE g_hEvent;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
//**************************************************
//创建一个命名的自动重置事件内核对象
g_hEvent=CreateEvent(NULL,FALSE,FALSE,LPCWSTR("tickets"));
if (g_hEvent)
{
if (ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"only one instance can run!"<<endl;
return;
}
}
//**************************************************
SetEvent(g_hEvent);
//创建线程
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
Sleep(40000);
//关闭事件对象句柄
CloseHandle(g_hEvent);
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket :"<<tickets--<<endl;
SetEvent(g_hEvent);
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
while (TRUE)
{
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets>0)
{
cout<<"Thread2 sell ticket :"<<tickets--<<endl;
SetEvent(g_hEvent);
}
else
{
SetEvent(g_hEvent);
break;
}
}
return 0;
}
- 线程同步的三种方法(互斥,事件,临界区) 之三 使用事件对象
- 线程同步的三种方法(互斥,事件,临界区) 之一 使用临界区对象
- 线程同步的三种方法(互斥,事件,临界区) 之二 使用互斥对象
- VC下线程同步的三种方法(互斥、事件、临界区)
- VC下线程同步的三种方法(互斥、事件、临界区)
- VC下线程同步的三种方法(互斥、事件、临界区)
- VC下线程同步的三种方法(互斥、事件、临界区)
- VC下线程同步的三种方法(互斥、事件、临界区)/(转)
- VC下线程同步的三种方法(互斥、事件、临界区)
- VC下线程同步的三种方法(互斥、事件、临界区)
- VC下线程同步的三种方法(互斥、事件、临界区) - pl2597758的专栏 - CSDNBlog
- 四种进程或线程同步互斥的方法:临界区、互斥对象、事件对象、信号量
- 线程同步的3种实现方法 互斥对象 临界资源 事件对象
- 线程同步-临界区、互斥对象、事件对象区别
- 多线程同步方法:临界区、事件、信号量、互斥对象
- 多线程同步的三种方法-互斥量-事件对象-关键代码段(临界区)
- 互斥对象,事件对象,临界区的使用比较
- 线程同步与临界区对象、互斥对象、事件对象
- svn简单配置及使用教程!
- 新的想法
- IIS系列常见错误及处理解决方法
- 把图片转换为文本以及其反过程
- 线程同步的三种方法(互斥,事件,临界区) 之二 使用互斥对象
- 线程同步的三种方法(互斥,事件,临界区) 之三 使用事件对象
- linux 安全防护
- memory tester 市场简介
- 进程间通信之初探
- 演讲技巧(1) http://yanjiang.365zhaosheng.com/
- vs2008使用之安装
- Web测试方法
- Standard Functions
- 演讲技巧(2)