쓰레드 - 이벤트 1. 이벤트 생성, CreateEvent() 호출 2. 쓰레드 생성, WaitForSingleObject(hEvent, INFINITE); // hEvent 가 SetEvent() 호출 될때까지 대기 3. 시그널 상태로 변경 - SetEvent() 호출 4. WaitForSingleObject(hThread) 호출로 블럭킹 되었다가 쓰레드 끝날때까지 대기 Singnal상태가 되면 WaitForSingleObject()반환할때 5. 이벤트 반환 - CloseHandle(hEvent) 호출 6. 쓰레드 반환 - CloseHandle(hThread) 호출 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29..
쓰레드 - 세마포어 뮤텍스와 유사하며 임계영역이 1개인 경우 바이너리(Binary) 세마포어라고 하는데 이는 뮤텍스와 동일한 기능을 제공한다. 카운팅 기능을 제공한다. 동시 접근 가능한 쓰레드가 10개라면, 이 카운터가 0이 되면 NON-SIGNAL 상태가 된다. 이 카운팅은 WaitForSingleObject() 호출되면 1개 감소하고 RelaseSemaphore() 호출되면 1 증가한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ..
쓰레드 뮤텍스 임계영역과 비슷하지만 커널 모드 스레드를 지원하여 부가 기능을 지원 받을 수 있으나 속도가 느린 단점이 있다. 1. 뮤텍스 핸들 선언 2. 뮤텍스 생성, CreateMutex() 호출 2. WaitForSingleObject() 호출 3. ReleaseMutax() 호출 4. 뮤텍스 반납, CloseHandle() 호출 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 #include "stdafx.h" #include #include #..
앞서(http://petra.tistory.com/1044) 임계영역 동기화는 특정 변수의 값을 증가시켰다. 이처럼 변수의 증감이 필요한 경우 해당 변수만 InterlockedIncrement(LONG volatile* 변수) 또는 InterlockedDecrement(LONG volatile* 변수) 로 만들어주면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 #include "stdafx.h" #include #include #include #include #define NUM_OF_GATE..