본문 바로가기

mutex

유효한 뮤텍스의 범위 설정 POSIX PTHREAD나 Win32 Thread의 경우, 프로세스 내에서 스레드의 동기화를 제공하는 방법으로 pthread는 뮤텍스의 속성을 지정하게 되고, Win32에서는 이런 경우에 특화되어 있는 경량형 뮤텍스인 CRITICAL_SECTION 구조체를 사용하게 된다. 만약 프로세스 사이에서 스레드의 동기화가 필요하다면 pthread는 뮤텍스의 속성을 지정하는 pthread_mutexattr_t을 적절하게 설정하고, Win32의 경우에는 핸들을 사용하는 뮤텍스를 생성하여 사용한다. (즉, 커널 오브젝트를 생성한다) 여튼, 뮤텍스를 사용하고자 마음 먹었다면, 중요한 것은 생성한 뮤텍스의 범위를 어떻게 설정하는가이다. 즉, 여러개의 스레드가 존재하고, 이 스레드들이 공유된 메모리 영역에 접근하고자 할 때.. 더보기
Semaphore and Mutex 1965년에 E. W. Dijkstra는 wakeup 수를 카운트하기 위한 정수 변수, 즉 세마포어(Semaphore)라는 새로운 변수형을 제안하였다. 세마포어는 wakeup이 하나도 없는 0 값을 가질 수도 있고, 하나 이상이 보류되어 있는 양수값을 가질 수도 있다. Dijkstra는 sleep과 wakeup에 대응되는 두 개의 동작 down, up을 갖도록 제안하였다. down 동작은 해당 세마포어 변수가 0보다 큰가를 검사한다. 큰 값이면 1만큼 감소시키고 계속된다. 만약 0이면 그 프로세스는 바로 자게 된다. 변수를 검사하고, 변경하고, 잘 수 있게 하는 동작은 분리되지 않는 단위동작으로 일어난다. 이것은 세마포어 동작이 일단 시작되면 다른 어떤 프로세스도 이 동작이 완료되거나 블록되지 않는 한 .. 더보기