유한 버퍼란? 데이터를 임시로 저장하는 고정된 크기의 메모리 영역임.
생산자는 데이터를 생산하고, 소비자는 데이터를 소비하는데, 동시에 일어나면 동기화 문제가 생김.
(가득차면 소비될때까지 기다리고, 비어있으면 생산될 때까지 기다려야함)
empty, full 세마포를 만드는 것으로 해결함
빈 버퍼와 가득 찬 버퍼의 상태를 나타내기 위함
생산자 프로세스에서 빈 공간이 있는지 확인하고 넣고, 차 있는 것을 알린다.
소비자 프로세스에선 가득 차 있는지 확인하거, 소비한 후, 비어 있는지 신호를 보냄
하나의 데이터베이스에 여러 병행 프로세스간 공유를 하는 경우, 프로세스마다 하는 일은 다르겠지만 읽거나 쓰고(갱신)하는 프로세스들이 있을 것이다.
읽기만 하는 프로세스를 reader, 쓰는 프로세스를 writer이라고 한다.
reader만 있으면 아무런 문제가 없지만, writer는 동기화 문제가 발생할 수 있다.
이런 문제를 reader-writer 문제라고 한다.
첫 번째의 경우 writer가 starvation에 빠지고, 두 번째는 reader가 stravation에 빠진다.
먹기 위해선 두 개의 젓가락을 들어야하는데, 한 명의 철학자가 젓가락을 들고 있으면 나머지는 들지 못한다.
각 젓가락을 하나의 세마포로 표현하는 것
wait를 통해 잡으려고 시도하고, signal을 통해 젓가락을 놓는다.
메모리 트랜잭션은 메모리 읽기와 쓰기연산의 원자적인 연속적 순서이다.
한 트랜잭션의 모든 연산이 완수되면 메모리 트랜잭션은 확정된다.