1.14 세마포어
뮤텍스나 임계 영역은 오로지 스레드 1개만 자원을 액세스할 수 있게 합니다. 하지만 세마포어는 원하는 개수의 스레드가 자원을 액세스할 수 있게 합니다.
다음 예시 코드를 봅시다.
Semaphore sema1; void Main() { // 스레드 2개만 자원을 액세스할 수 있게 제한한다. sema1 = new Semaphore(2); } void Thread1() { // 리소스를 액세스할 수 있을 때까지 기다린다. sema1.Wait(); // 리소스 액세스가 다 끝났음을 세마포어에 알린다. sema1.Release(); } void Thread2() { // 리소스를 액세스할 수 있을 때까지 기다린다. sema1.Wait(); // 리소스 액세스가 다 끝났음을 세마포어에 알린다. sema1.Release(); } void Thread3() { // 리소스를 액세스할 수 있을 때까지 기다린다. sema1.Wait(); // 리소스 액세스가 다 끝났음을 세마포어에 알린다. sema1.Release(); }