synchronization[mutex]
mutex
뮤텍스 락은 단순한 형태이며, 하나의 전역변수, 두개의 함수로 구현이 가능합니다.
- 자물쇠 : 프로세스들이 공유하는 전역 변수 lock
- 임계 구역을 잠그는 역할 : acquire 함수
- 임계 구역의 잠금을 해제하는 역할 : release 함수
예시 코드
1
2
3
acquire();
// 임계 구역내의 활동
release();
1
2
3
4
5
6
7
8
9
acquire(){
while ( lock == true )
;
lock = true;
}
release() {
lock = false;
}
acquire()
임계 구역이 잠겨있다면 ( while ( lock = true) ) 임계 구역이 잠겨 있는지 반복적으로 체크합니다.
체크 하다가 임계구역이 잠겨있지 않다면 임계 구역을 잠급니다.
release()
임계 구역 작업이 끝나면, 잠금을 해제합니다.
즉, acquire(); 함수를 호출하여 임계 구역의 자물쇠를 잠구고, 임계 구역내의 활동을 시작합니다.
임계 구역의 활동이 끝나고나면, release()를 호출하여 임계구역의 자물쇠를 잠금 해제합니다.
이렇게 뮤텍스 락을 설정하면 프로세스는, 락을 획득할 수 없다면 ( 임계 구역 진입이 불가능 ) 하면 무작정 기다리고, 락을 획득할 수 있다면 임계구역을 잠그고, 임계 구역에서 작업을 진행하고, 작업이 완료되면 임계 구역의 잠금을 해제하고나서 빠져나옵니다.
임계 구역이 잠겨 있을때, 프로세스는 반복적으로 임계 구역이 잠겨 있는지 확인을 하는데, 이런 대기 방식을 바쁜 대기라고 합니다.
This post is licensed under CC BY 4.0 by the author.