🌹 정리 by 장미(https://velog.io/@newbiekim/)
뮤텍스와 세마포어는 임계구역(critical section) 문제를 해결하기 위해 등장한 알고리즘이다.
그렇다면 임계구역(== 임계영역)이 무엇이냐?
임계구역은 *공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역을 뜻한다.
*공유 자원: 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다.
공동으로 이용되기 때문에 누가 언제 데이터를 쓰거나 읽느냐에 따라 결과가 달라질 수 있다.
즉, 프로세스 실행 상황에서는 공유할 수 없는 자원이 중요한 자원이자 임계구역이다.
따라서 임계구역에서는 프로세스들이 동시에 작업하면 안 된다.
어떤 프로세스가 임계구역에 들어가면, 다른 프로세스는 임계구역 밖에서 기다려야 한다.
먼저 들어간 프로세스가 나와야 들어갈 수 있는 구조다.
임계구역과 관련하여 어떤 문제가 있느냐 하면, 전통적인 문제로 생산자-소비자 문제가 있다.
producer()
{
input(buf);
sum = sum + 1;
}
consumer()
{
output(buf);
sum = sum - 1;
}