互斥锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的共享资源,无序的。
// 线程.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
int k = 0;
int i = 0,j = 0;
int conductor_a=0,conductor_b=0,conductor_c=0,conductor_d=0;
CRITICAL_SECTION cs;
void thread(void *a)
{
k++;
int man = k;
while (1)
{
Sleep(1);
EnterCriticalSection(&cs);
if( i > 99)
{
if (0 == j)
{
printf("1:%d 2:%d 3:%d 4:%d \n",conductor_a,conductor_b,conductor_c,conductor_d);
j = 1;
}
break;
}
else
{
i++;
printf("售票员%d 卖出座位号:%d\n",man,i);
switch(man)
{
case 1:conductor_a++;break;
case 2:conductor_b++;break;
case 3:conductor_c++;break;
case 4:conductor_d++;break;
}
}
LeaveCriticalSection(&cs);
}
}
int main(int argc, char* argv[])
{
InitializeCriticalSection(&cs);
HANDLE hThred[4];
EnterCriticalSection(&cs);
for(int i = 0; i < 4 ; i ++)
{
hThred[i] = CreateThread( 0, 0, (LPTHREAD_START_ROUTINE)thread, 0, 0, 0 );
}
LeaveCriticalSection(&cs);
WaitForMultipleObjects(4,hThred,true,0xFFFFFFFF);
while(1);
//DeleteCriticalSection(&cs);
return 0;
}