为了保证互斥,信号量操作需要是原子的



如果Wait和Signal实现如下:

void Wait (Semaphore S) {
while (S.count <=0){}
S.count = S.count -1;
}
void Signal (Semaphore S){
S.count = S.count+1;
}

谁能解释一下,什么时候线程T1和T2都可以进入一个由单个互斥信号量保护的临界区,因为缺乏原子性?

假设T1正在运行。

等待信号量,检查计数是否小于或等于0,假设为false,循环结束。

现在调度程序停止线程并将控制权传递给T2。当然,它做同样的事情,然后减少计数器并由调度器停止,控制权被交还给T1。

T1继续减少值(这次不检查,循环结束!)并退出等待。

控制传递给T2, T2也退出等待。

现在它们都进入临界区

最新更新