설계과제 4는 다중 쓰레드 프로그래밍의 기본 개념을 이해하는 것으로, (1) 간단한 Master-Worker Thread Pool 구현, (2) Reader-Writer Locks 쓰레드 프로그램 구현, (3) pthread를 이용한 사용자 수준 세마포어(SSU_Sem) 구현이 있다.
모두 쓰레드의 lock 및 조건변수를 사용하여 구현하는 것으로써
(1)은 마스터 쓰레드가 공유 버퍼에 연속적으로 숫자를 생성하고 워커 쓰레드가 공유버퍼에 생성된 숫자를 소비하는 방식으로 이때 busy-waiting을 피하기 위해서 lock 및 조건 변수를 적절히 사용하여 동기화를 해줘야 한다.
(2)는 Read-Write Locks을 통한 쓰레드 간 병행성 향상 프로그램으로써 read, write에 따른 쓰레드들의 lock을 적절히 허용해야한다.
(3)은 Linux 커널에서 제공하는 세마포어와 기능적으로 유사한 세마포어(SSU_Sem)을 구현하는 것으로 쓰레드 간의 동기화를 위해 구현한 SSU_Sem를 사용해야한다.
다음의 과정을 통해 다중 쓰레드 프로그래밍의 기본 개념을 이해할 수 있고 쓰레드들 사이의 다양한 동기화 방법을 배울 수 있다.