교착상태 예제 (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 만 가지고 만들어봄 윈도우용 (하지만 돌아가는건 커맨드창이지롱~)
'운영체제론' 카테고리의 다른 글
윈도우즈 크리티컬섹션, 뮤텍스, 이벤트, 세마포어 (0) | 2015.01.07 |
---|---|
세마포어를 사용해서 뮤텍스 교착상태 회피하기 (2) (0) | 2015.01.06 |
세마포어를 사용해서 뮤텍스 교착상태를 회피하기 (0) | 2015.01.06 |
교착상태 예제 (2) (0) | 2015.01.06 |
교착상태 예제 (0) | 2015.01.06 |