Class Semaphore {
int sem;
WaitQueue q;
}
Semaphore::P() {
while (sem <= 0) {
Add this thread t to q;
block(t)
}
sem--;
}
Semaphore::V() {
sem++;
if (sem <= 0) {
Remove a thread t from q;
wakeup(t)
}
}
问题:这个实现与上一个有什么不同?
P、V操作的顺序有影响吗?
Dijkstra 应译作“戴克斯特拉” https://zhuanlan.zhihu.com/p/73390180 维基百科 Edsger Wybe Dijkstra 页面(https://en.wikipedia.org/wiki/Edsger_W._Dijkstra),Dijkstra 可读作 /ˈdaɪkstrə/ 或 [ˈdɛikstra]
![w:1200](figs/semaphore-impl.png)
- 两者等价:基于一个可以实现另一个