728x90

 

이름 있는 뮤텍스 기반의 프로세스 동기화

- 동기화 하고 싶은 쓰레드가 다른 프로세스에 있을 때 사용

- 프로세스 A에서 생성한 뮤텍스는 프로세스 A의 쓰레드는 접근이 가능하지만 프로세스 B의 쓰레드는 접근이 불가능

- 뮤텍스 핸들 값은 프로세스 A에서만 고유한 값이기 때문에 핸들 값을 넘겨준다 해도 의미가 없음

- 동기화를 위해서는 프로세스 A 핸들 테이블에 저장된 뮤텍스의 정보를 등록해야 함

- 프로세스 내의 쓰레드 간의 동기화를 위해서는 핸들을 이용했지만 다른 프로세스에는 뮤텍스의 핸들 정보가 등록이 되어 있지 않기 때문에 뮤텍스에 설정된 이름을 통해 접근

뮤텍스 소유와 WAIT_ABANDONED

- 소유의 관점에서 세마포어와 뮤텍스의 차이점

    -> 뮤텍스 : 열쇠를 얻은 쓰레드가 반환을 해야함

    -> 세마포어 : 열쇠를 여러개 가지고 공유를 하기 때문에 얻은 쓰레드가 꼭 반환하지 않아도 됨

- WAIT_ABANDONED

    -> A 쓰레드가 열쇠를 얻고 임계영역에 들어가 있고 B 쓰레드가 WaitForSingleObject 호출 후 대기하고 있을 때 열쇠를 가지고 있는 쓰레드가 열쇠를 반환하지 않고 사라지는 경우 B 쓰레드가 반환값으로 WAIT_ABANDONED 값을 얻게 됨

    -> A 쓰레드의 비정상적 종료로 인해 뮤텍스 반환이 적절치 이루어지지 않았기 때문에 열쇠를 OS 가 B 쓰레드에 열쇠를 넘겨준다는 의미

728x90

+ Recent posts