学习链接 : 链接点击跳转
pc.c
中的自旋变成睡眠
操作系统 = 更衣室管理员
先到的人 (线程)
成功获得手环,进入游泳馆
*lk = 🔒,系统调用直接返回
后到的人 (线程)
不能进入游泳馆,排队等待
线程放入等待队列,执行线程切换 (yield)
洗完澡出来的人 (线程)
交还手环给管理员;管理员把手环再交给排队的人
如果等待队列不空,从等待队列中取出一个线程允许执行
如果等待队列为空,*lk = ✅
管理员 (OS) 使用自旋锁确保自己处理手环的过程是原子的
更衣室管理
完全没有必要限制手环的数量——让更多同学可以进入更衣室
管理员可以持有任意数量的手环 (更衣室容量上限)
先进入更衣室的同学先得到
手环用完后才需要等同学出来
“手环” = “令牌” = “一个资源” = “信号量” (semaphore)
初始的时候 每个哲学家只有一把叉子
因为每人都只拿左手的叉子 , 导致