교착상태 예제 (3)

운영체제론 2015. 1. 6. 19:33

#include <stdio.h>

#include <Windows.h>


int print1 = 0;

int print2 = 0;


HANDLE hMutex1; // 뮤텍스1

HANDLE hMutex2; // 뮤텍스2


// 실행될 스레드 1

unsigned int NewThread01(void* pParam)

{

while(1)

{

WaitForSingleObject(hMutex1, INFINITE); // 뮤텍스1

WaitForSingleObject(hMutex2, INFINITE); // 뮤텍스2


print1++;


ReleaseMutex(hMutex2); // 뮤텍스2 해제

ReleaseMutex(hMutex1); // 뮤텍스1 해제

}


return 0;

}


// 실행될 스레드 2

unsigned int NewThread02(void* pParam)

{

while(1)

{

WaitForSingleObject(hMutex2, INFINITE); // 뮤텍스2

WaitForSingleObject(hMutex1, INFINITE); // 뮤텍스1


print2++;

ReleaseMutex(hMutex1); // 뮤텍스1 해제

ReleaseMutex(hMutex2); // 뮤텍스2 해제

}

return 0;

}


int main(int argc, char* argv[])

{

hMutex1 = CreateMutex(NULL, FALSE, NULL); // 뮤텍스1 초기화

hMutex2 = CreateMutex(NULL, FALSE, NULL); // 뮤텍스2 초기화


CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)NewThread01, 0, 0, NULL); // 스레드01 생성

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)NewThread02, 0, 0, NULL); // 스레드02 생성


while(1)

{

printf("thread 1 : %d\tthread 2 : %d\n", print1, print2);


Sleep(400); // 관찰을 위한 Sleep


}


CloseHandle(hMutex1); // 뮤텍스1 소멸

CloseHandle(hMutex2); // 뮤텍스2 소멸


return 1;

}


그냥 Windows.h 만 가지고 만들어봄  윈도우용 (하지만 돌아가는건 커맨드창이지롱~)

: