原子获取并设置 x, y 指令无条件地将内存位置 x 设置为 1 并获取 xny 的旧值,而不允许对内存位置 x 进行任何干预访问。考虑以下 P 和 V 函数在二进制信号量 S 上的实现。
void P (binary_semaphore *s)
{
unsigned y;
unsigned *x = &(s->value);
do
{
fetch-and-set x, y;
}
while (y);
}
void V (binary_semaphore *s)
{
S->value = 0;
}
以下哪一项是正确的?
(A)如果在 P 中禁用了上下文切换,则该实现可能不起作用
(B)可以使用一对正常的加载/存储来代替使用 fetch-and –set
(C) V的执行有误
(D)代码没有实现二进制信号量答案:(一)
说明:见https://www.geeksforgeeks.org/operating-systems-set-15/的问题3
这个问题的测验