식사하는 철학자 동기화
CS/Common 2010. 1. 8. 06:48원문 : Stanford iTunesU Programming Paradigm 17강
학부때 OS 시간에는 뭔가 엄청 복잡하고 어려웠는데... 왜이렇게 간단하지...? ;;;
Semaphore forks[5] = {1, 1, 1, 1, 1} Semaphore numAllowedToEat(4); // 최소한 한명은 Idle. DeadLock 피함. void Philosopher(int id) { for (int i=0; i < 3; ++i) { Think(); SemaphoreWait( numAllowedToEat ); SemaphoreWait( forks[ id ] ); SemaphoreWait( forks[ (i+1)%5 ] ); Eat(); SemaphoreSignal( forks[ id ] ); SemaphoreSignal( forks[ (id+1)%5 ] ); SemaphoreSignal( numAllowedToEat ); } }
학부때 OS 시간에는 뭔가 엄청 복잡하고 어려웠는데... 왜이렇게 간단하지...? ;;;