C++マルチスレッドプログラミング例Demoキーコードセグメント臨界領域実現スレッド同期


DWORD WINAPI Fun1Proc(LPVOID lParam);
DWORD WINAPI Fun2Proc(LPVOID lParam);

int balance = 110;//    [  10   ]
CRITICAL_SECTION critical;//     

/*        [   ]        */
void main()
{
InitializeCriticalSection(&critical);
HANDLE hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//  1  [   100 ,    110 ]
HANDLE hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);//  2  [   100 ,     10 ]
CloseHandle(hThread1);
CloseHandle(hThread2);

Sleep(5000);
DeleteCriticalSection(&critical);
}

DWORD WINAPI Fun1Proc(LPVOID lParam)
{
int i = 50;
while (i-- > 0)
{
EnterCriticalSection(&critical);
if (balance 0)
{
EnterCriticalSection(&critical);
if (balance-100<10)
{
printf("  2:\t    :%d ,    ,  2    ,    1  ...
"
,balance); LeaveCriticalSection(&critical); continue; } printf(" 2:\t %d , 2 100
"
,balance); balance-=100; LeaveCriticalSection(&critical); } return 0; }