{
WaitForSingleObject(hEvent, INFINITE);
if(gTicket > 0)
{
cout<<"thread1 sell ticket "<
else
{
break;
}
SetEvent(hEvent);
}
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParameter )
{
while(true)
{
WaitForSingleObject(hEvent, INFINITE);
if(gTicket > 0)
{
cout<<"thread2 sell ticket "<
else
{
break;
}
SetEvent(hEvent);
}
return 0;
}
#include
#include
using namespace std;
// 声明两个线程函数
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
);
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
);
// 全局变量
int gTicket = 100;
// 事件对象
HANDLE hEvent;
int main()
{
// 创建两个线程句柄
HANDLE hThread1 = CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL);
HANDLE hThread2 = CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL);
// 创建时间对象
hEvent = CreateEvent(NULL, false, true, NULL);
// 关闭两个线程句柄
CloseHandle(hThread1);
CloseHandle(hThread2);
// 主线程睡4秒,让别的线程函数有机会获得CPU时间片
Sleep(4000);
system("pause");
return 0;
}
// 定义两个线程函数
DWORD WINAPI ThreadProc1(LPVOID lpParameter )
{
while(true)
{
WaitForSingleObject(hEvent, INFINITE);
if(gTicket > 0)
{
cout<<"thread1 sell ticket "<
else
{
break;
}
SetEvent(hEvent);
}
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParameter )
{
while(true)
{
WaitForSingleObject(hEvent, INFINITE);
if(gTicket > 0)
{
cout<<"thread2 sell ticket "<
else
{
break;
}
SetEvent(hEvent);
}
return 0;
}
3关键代码段
[cpp]
#include
#include
using namespace std;
// 声明两个线程函数
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
);
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
);
// 全局票数
int gTicket = 100;
// 关键代码段
CRITICAL_SECTION gSection;
int main()
{
// 初始化关键代码段,必须先于线程的创建
InitializeCriticalSection(&gSection);
// 创建两个线程句柄
HANDLE hThread1 = CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL);
HANDLE hThread2 = CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL);
// 关闭两个线程句柄
CloseHandle(hThread1);
CloseHandle(hThread2);
// 主线程sleep 4秒
Sleep(4000);
// 删除关键代码段
DeleteCriticalSection(&gSection);
system("pause");
return 0;
}
// 定义两个线程函数
DWORD WINAPI ThreadProc1(LPVOID lpParameter )
{
while(true)
{
EnterCriticalSection(&gSection); // 进入关键代码段
if(gTicket > 0)
{
cout<<"thread1 sell ticket "<
else
{
break;
}
LeaveCriticalSection(&gSection); // 离开关键代码段
}
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParameter )
{
while(true)
{
EnterCriticalSection(&gSection); // 进入关键代码段
if(gTicket > 0)
{
cout<<"thread2 sell ticket "<
else
{
break;
}
LeaveCriticalSection(&gSection); // 离开关键代码段
}
return 0;
}
#include
#include
using namespace std;
// 声明两个线程函数
DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
);
DWORD WINAPI ThreadProc2(
LPVOID lpParameter // t