[CS] 동기화에 대한 나름의 이해

2023. 10. 12. 13:47CS

프로세스나 쓰레드가 공유 자원에 접근할 때 동기화가 되지 않는다면 너무 많은 우유라고 불리는 문제가 생긴다 즉 엄마가 냉장고를 확인해서 우유가 없음을 확인하여 우유를 사러 가는 사이 아빠가 냉장고를 확인해서 우유가 없음을 확인하여 우유를 사온다 그러면 1개만 있어야 하는데 2개가 생겨 문제가 생긴다 이를 해결하기 위해서 크리티컬 섹션(임계 영역)에서의 경쟁 상태를 막아주어야 한다 즉 한번에 하나의 프로세스만 들어가도록 해야하는데 이를 프로세스 동기화라고 한다
프로세스 동기화를 구현하는 방법으로는 크게 두 가지가 있는데 뮤텍스와 세마포어이다 이 둘의 가장 큰 차이는 한번에 얼만큼의 프로세스가 접근 가능한지이다 한번에 하나만 가능하면 뮤텍스 그 이상이면 세마포어이다
뮤텍스는 락을 가진 프로세스 하나만 들어갈 수 있고 나머지는 기다려야 한다 화장실 예가 유명하다 열쇠로 열어야만 하는 화장실에 가기 위해서는 열쇠가 하나라면 하나의 사람만 들어갈 수 있다 그 사람이 키를 넘기면 다른 사람도 이용할 수 있다 그래서 락킹 메커니즘이라고 한다 그리고 락이 풀렸는지를 계속 확인해야 한다 이를 비지 웨이팅의 한 종류인 스핀락이라고 한다(busy waiting) 이렇게 하면 cpu 효율이 떨어지게 된다
뮤텍스는 화장실이 여러개 있는 것이다 그래서 한 사람이 나오면 다른 사람이 들어갈 수 있다 이는 접근을 해제하면 다른 프로세스에 시그널링을 한다고 시그널링 메커니즘이라고 한다

Reference


https://www.yes24.com/Product/Goods/121769526