mutex를 이용한 중복실행 방지


운영체제는 컴퓨터 자원을 안전하게 관리하여야 한다.
critical resource 에 대해 경쟁 관계가 있는 프로세스들이 존재하는 경우에 Mutual exclusion, deadlock, starvation의 제어 문제가 발생 할 수 있다.

deadlock은 세마포어를 사용하여 해결 할 수 있다. 세마포어는 카운트 값을 주고 critical section에 접근 할 수 있는 프로세스의 수의 제한을 두어 프로세스가 자원을 점유할 때 카운트를 -1 해주고 자원을 반납할 때 +1 해주는 식으로 deadlock을 해결한다.
Mutex는 2진 세마포어와 비슷하다.(카운트 = 1, 쓰레드) 자원에 오로지 하나의 쓰레드만 접근 할 수 있게 한다.

Mutex를 사용하여 중복 실행 방지코드를 작성해보자.



CreateMutex 함수로 MutexInstance를 생성(3번째 인자가 고유네임)한다.
CreateMutex 함수를 호출 하였는데 고유네임으로 이미 뮤텍스가 생성 되 있다면 CreateMutex함수는 ERROR_ALREADY_EXISTS 에러를 리턴하게된다.
프로세스 메인 쓰레드에 MutexInstance를 생성해 놓으면 CreateMutex 함수의 에러코드를 확인해 중복 실행을 방지 할 수 있다.

0 개의 댓글:

댓글 쓰기