【发布时间】:2020-01-21 17:52:38
【问题描述】:
我正在阅读“操作系统概念第 10 期”。
它给出了信号量的非忙等待定义:
typedef struct {
int value;
struct process *list;
} semaphore;
wait(semaphore *S) {
S->value--;
if (S->value < 0) {
add this process to S->list;
sleep();
}
}
signal(semaphore *S) {
S->value++;
if (S->value <= 0) {
remove a process P from S->list;
wakeup(P);
}
}
上面写着:
承认我们并没有完全消除忙碌是很重要的 使用 wait() 和 signal() 操作的这个定义等待。相反,我们已将忙碌等待从入口部分移至关键部分 应用程序的部分。此外,我们有限的忙碌 等待 wait() 和 signal() 操作的关键部分
这个定义我可以理解,我们还需要一些机制来保护wait()和signal()代码的临界区。
但是“我们已经将繁忙的等待从应用程序的入口部分转移到了关键部分”是什么意思?
为什么程序员使用这个定义下的信号量需要在他们代码的关键部分使用忙等待?
【问题讨论】:
标签: operating-system semaphore critical-section