프로세스 동기화가 적절히 설계되지 않아, 식사하는 철학자 문제처럼 모든 프로세스가 더 이상 작업을 진행할 수 없는 deadlock(교착상태)에 빠질 수 있다. 단순한 프로그램이 아닌, 운영체제에서 교착상태가 발생하는 것은 다소 치명적이다. 교착상태 필요 조건 Mutual Exclusion : 한 프로세스가 자원을 사용 중이라면, 다른 프로세스는 사용할 수 없다. Hold and Wait : 한 프로세스가 특정 자원을 가진 상태에서 대기에 빠진다. No Preemption : 한 프로세스가 진행 중이라면, 다른 프로세스가 끼어들 수 없다. Circular Wait : 프로세스가 자원 획득을 위해 원형 방향을 이룬다. (식사하는 철학자) 교착 상태는 위의 4가지 조건이 있을 경우, 발생할 가능성이 커지게 된..
Producer - Consumer Problem 특정 프로세스는 데이터를 생산하고, 특정 프로세스는 생산된 데이터를 통해 처리하는 작업과 같이 생성자-소비자가 있는 프로그램에서 발생할 수 있는 문제이다. 만약 생산되지 않은 경우에 데이터를 사용하는 소비자가 데이터를 가져가게 된다면 원치 않는 데이터 (쓰레기 값)을 가져가게 될 가능성이 크다. 따라서 각각의 프로세스(쓰레드)로 부터 생성자 - 소비자가 존재한다면 생성, 소비 순으로 진행될 수 있도록 동기화가 필요하다. import java.util.concurrent.Semaphore; class Buffer { int[] buf; int size; int count; int in; int out; Semaphore mutex, full, empty; ..