【正确答案】正确答案: 1) semaphore bridge=1; //用于互斥地访问桥 //从北向南 NtoS() { P(bridge), 通过桥; v(bridge), } //从南向北 StoN() { P(bridge), 通过桥; v(bridge); } 2) int cuntSN=0; //用于表示从南到北的汽车数量 int countNS=0; //用于表示从北到南的汽车数量 semaphore mutexSN=1; //用于保护countSN semaphore mutexNS=1; //用于保护countNS semaphore bridge=1; //用于互斥地访问桥 //从南向北 StoN() { P(mutexSN); if(countSN==0) P(bridge); COUNtSN++; V(mutexSN); 过桥; P(mutexSN); countSN一一; if(COUNtSN==0) V(bridge); v(mutexSN); } //从北向南 NtoS() { P(mutexNS); if(countNS=0 ) P(bridge); coHntNS++; V(mutexNS); 过桥; P(mutexNS); countNS一一; if(countNS==0) V(bridge); v(mutexNS); }
【答案解析】