当二进制信号量被发出两次信号时会发生什么? IE。 s=1;等待(s);信号信号; s 变为 0 还是保持为 1?

What happens when Binary Semaphore is Signalled twice? ie. s=1;wait(s); signal(s)signal(s); Does s becomes 0 or it remains 1?

当二进制信号量被发出两次信号时会发生什么? 即假设 s 是具有 s=1

的二进制信号量变量

现在我们进行以下操作--

wait(s),signal(s),signal(s)

s 是变成 0 还是保持为 1?

二进制信号量将用于保护某些资源,以便一次只有一个进程可以访问它。

这个进程会等待,假设信号量为 1(资源尚未繁忙)将使信号量 =0。

当该进程完成资源时,它会发出信号,允许其他进程访问资源,使信号量 =1。

没有理由为什么进程会发出两次信号,也没有任何其他进程会在等待之前发出信号的原因(如果你想到了请告诉我),所以两个连续的信号将是一个错误。现在,如果我正在编写 OS 原始实现,我会判断将信号保留为 1 比将其设置为 0 更好,并且可能会一直锁定资源。

关于信号量的标准文本讨论递增和递减计数,但那是因为这是一种思考信号量计数的有用方法。当信号量以奇怪的方式使用时,实际信号量在实际 OS 中的行为方式取决于实现,可能不值得作为一般理论进行研究。