文章目录
原题描述
南开大学和天津大学之间有一条弯曲的路,同一方向每次只允许一辆自行车通过,中间有小的安全岛M(同时允许两辆车通过),可供相向行驶的两辆小车错车,如下图所示。设计算法并使用P,V操作
实现。
解题思路
- 入口T和N分别设置信号量T2N,N2T,初值均为1,保证每次只有一辆车进入小路;
- 定义信号量K,L,初值均为1。由于下一段路可能有相向而来的小车,得在M处会车,所以小车在通过M前要检查下一段路是否有来车,即申请下一段路的使用权。
解题步骤(PV操作)
Semaphore T2N = 1; // 从T到N的互斥信号量
Semaphore N2T = 1; // 从N到T的互斥信号量
Semaphore K = 1; // 通过K段路的互斥信号量
Semaphore L = 1; // 通过L段路的互斥信号量
Bike T2N{
//从T(天津大学)到N(南开大学)的小车
while(1){
P(T2N); //入小路前对T口上锁
P(L)