問題描述:spa
有五個哲學家圍坐在一圓桌旁,桌中央有一盤通心麪,每人面前有一隻空盤於,每兩人之間放一把叉子。每一個哲學家思考、飢餓、而後吃通心麪。爲了吃麪,每一個哲學家必須得到兩把叉子,且每人只能直接從本身左邊或右邊去取叉子。code
解決方案:blog
Semaphore fork[5]={1,1,1,1,1}; Semaphore footman=4;//最多容許4個哲學家進程同時進行 cobegin process philosopher_i() ){/*i=0,1,2,3,4 */ while(true) { P(footman); Think(); P(fork[i]); P(fork[(i+1)%5]); Eat(); V(fork[i]); V(fork[(i+1)%5]); V(footman); } }
semaphore fork[5]; for (int i=0;i<5;i++) fork[i]= 1; process philosopher_i( ){/*i=0,1,2,3 */ while(true) { think( ); P(fork[i]; /*i=4,P(fork[0])*/ P(fork[(i+1)%5] );/*i=4,P(fork[4])*/ eat( ); V(fork[i]); V(fork([i+1]%5); } }
(方案不少,但儘量的找到最優的方案)進程