#include<Windows.h>
#include<stdio.h>
DWORD WINAPI myfunc1(LPVOID lpParam);
DWORD WINAPI myfunc2(LPVOID lpParam);
static int a1 = 0;
CRITICAL_SECTION Section;
int main()
{
InitializeCriticalSection(&Section);//应该在此创建
HANDLE h1, h2;
h1 = ::CreateThread(NULL, 0, myfunc1, NULL, 0, NULL);
printf("线程1开始运行\r\n");
h2 = ::CreateThread(NULL, 0, myfunc2, NULL, 0, NULL);
printf("线程2开始运行\r\n");
//不能再次创建 InitializeCriticalSection(&Section);//应该在此创建
::CloseHandle(h1);
::CloseHandle(h2);
::Sleep(1000);
printf("input q to quit\r\n");
while (1)
{
if (getchar() == 'q')
{
DeleteCriticalSection(&Section);
return 0;
}
}
}
DWORD WINAPI myfunc1(LPVOID lpParam)
{
while (1)
{
EnterCriticalSection(&Section);
a1++;
if (a1 < 10000)
{
::Sleep(1000);
printf("线程1正在计数:%d\r\n", a1);
LeaveCriticalSection(&Section);
}
else
{
LeaveCriticalSection(&Section);
break;
}
}
return 0;
}
DWORD WINAPI myfunc2(LPVOID lpParam)
{
while (1)
{
EnterCriticalSection(&Section);
a1++;
if (a1 < 10000)
{
::Sleep(100);
printf("线程2正在计数:%d\r\n", a1);
LeaveCriticalSection(&Section);
}
else
{
LeaveCriticalSection(&Section);
break;
}
}
return 0;
}