Operating system 当二进制信号量发出两次信号时会发生什么?即s=1;等候;;信号(s)个信号(s);s是变为0还是保持为1?

Operating system 当二进制信号量发出两次信号时会发生什么?即s=1;等候;;信号(s)个信号(s);s是变为0还是保持为1?,operating-system,semaphore,Operating System,Semaphore,当二进制信号量发出两次信号时会发生什么? i、 假设s是s=1的二进制信号量变量 现在我们做以下工作- wait(s),signal(s),signal(s) s是变为0还是保持为1?二进制信号量将用于保护某些资源,以便一次只能有一个进程访问它 这个进程将执行一个等待,假设信号量为1,资源还不忙,则该等待将使信号量=0 当该进程使用资源完成时,它将发出信号,允许其他进程访问该资源,使信号量=1 没有任何理由说明进程会发出两次信号,也没有任何理由说明任何其他进程会在等待之前发出信号。如果您想到一

当二进制信号量发出两次信号时会发生什么? i、 假设s是s=1的二进制信号量变量

现在我们做以下工作-

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

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

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

这个进程将执行一个等待,假设信号量为1,资源还不忙,则该等待将使信号量=0

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

没有任何理由说明进程会发出两次信号,也没有任何理由说明任何其他进程会在等待之前发出信号。如果您想到一个,请告诉我,因此两个连续的信号将是错误的。现在,如果我正在编写操作系统原语实现,我会判断将信号保留为1比将其设置为0更好,并且可能会一直将资源锁定


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

您能解释原因吗??为什么不能是1+1%2变成0。我已经重新写了回复,并做了一些解释。对不起,有点简短。