首页 > 试题广场 >

可以用二元信号量实现一般信号量。我们使用 semWaitB&

[问答题]
可以用二元信号量实现一般信号量。我们使用 semWaitB 操作和 semSignalB 操作以及两个二元信号量 delay 和 mutex 。考虑下面的代码:
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)并到达同一点。现在要做的是移动程序中的一行。

这道题你会答吗?花几分钟告诉大家答案吧!