void semWait ( semaphore s)
{
semWaitB ( mutex);
s--;
if ( s < 0){
semSignalB ( mutex);
semWaitB ( delay);
}
else SemsignalB ( mutex );
}
void semSignal ( semaphore s);
{
semWaitB ( mutex);
s++;
if ( s <= 0)
semSignalB( delay );
semSignalB ( mutex);
} 最初,s 被设置成期待的信号量值,每个 semWait 操作将信号量减 1 ,每个 semSignal 操作将信号最加l。二元信号量 mutex 初始化为 1 ,确保在更新 s 时保证互斥。二元信号量 delay 初始化为 0 ,用于阻塞进程。
下面的程序有一个缺点。请找出这个缺点,并提出解决方案。提示:假设有两个进程,每个都在s初始化为。时调用 semWait (s),当第一个刚执行semSignalB (mutex)但还未执行 semWaitB(delay) 时,第二个调用 semWait (s)并到达同一点。现在要做的是移动程序中的一行。
