프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 Critical Section(여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 블록) 문제가 발생할 수 있다.
<aside> 💡 Critical section(임계구역) 이란 ?
이를 해결하기 위해 데이터를 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 두는 동기화 방식을 취해야 한다. 동기화 도구에는 대표적으로 뮤텍스(Mutex)와 세마포어(Semaphore)가 있다. 이들은 모두 공유된 자원의 데이터를 여러 스레드/프로세스가 접근하는 것을 막는 역할을 한다.
세마포어는 정수로 되어 있는 변수, 뮤택스는 객체이다.

유래
E. J. Dijkstra(다익스트라)에 의해 고안된 프로세스 간의 상호배제 및 동기화 문제 해결 방법이다.
공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 여러 Process 혹은 Thread가 접근하는 것을 막아준다. (동기화 대상이 하나 이상)
만약, 어떤 공유 자원의 세마포어가 3이라면, 해당 자원은 동시에 최대 3개의 프로세스가 접근 가능하다는 의미이다. (단순히 말하면, 공유자원의 개수를 나타내는 변수이다.)
즉, 병행 처리를 위한 동기화 기법이다.
<aside> 💡 동기화 기법 : 두 개 이상의 프로세스를 동시에 처리할 수 없으므로, 각 프로세스에 대한 처리 순서를 결정하는 것. 상호 배제의 한 형태이다.
</aside>
