//临界区
#i nclude <windows.h>
#i nclude <iostream.h>
extern int tickets;
//临界区对象
CRITICAL_SECTION csMyCriticalSection;
DWORD WINAPI thread_CS_Fun1Proc(
LPVOID lpParameter)
{
while (true) {
//进入临界区
EnterCriticalSection (&csMyCriticalSection);
if (tickets>0) {
Sleep(1);
cout<<"thread1: "<<tickets--<<endl;
}
else
break;
//离开临界区
LeaveCriticalSection (&csMyCriticalSection);
}
return 0;
}
DWORD WINAPI thread_CS_Fun2Proc(
LPVOID lpParameter)
{
while (true) {
EnterCriticalSection (&csMyCriticalSection);
if (tickets>0) {
cout<<"thread2: "<<tickets--<<endl;
}
else
break;
LeaveCriticalSection (&csMyCriticalSection);
}
return 0;
}
void thread_CriticalSection()
{
HANDLE handle1 = CreateThread(NULL, 0, thread_CS_Fun1Proc, NULL, 0, NULL);
HANDLE handle2 = CreateThread(NULL, 0, thread_CS_Fun2Proc, NULL, 0, NULL);
CloseHandle(handle1);
CloseHandle(handle2);
//初始化临界区
InitializeCriticalSection (&csMyCriticalSection);
Sleep(200); //等待线程执行完闭
//删除临界区
DeleteCriticalSection(&csMyCriticalSection);
}
void main()
{
thread_CriticalSection();
cout<<"++Critical Section++"<<endl;
}
临界区也是要创建一个公共的临界区,然后各个线程进入这个临界区
//初始化临界区, 可以在线程创建函数中执行 参数是out, 相当于创建临界区
InitializeCriticalSection (&csMyCriticalSection);
//进入临界区
EnterCriticalSection (&csMyCriticalSection);
//退出临界区
LeaveCriticalSection (&csMyCriticalSection);
//删除临界区
DeleteCriticalSection(&csMyCriticalSection);