为什么我们在信号量中使用小于或等于 (<=) 符号?



在信号量中实现等待代码时,我们使用以下代码:

wait(semaphore s) { while(s<=0); s -= 1;}

相反,我们可以使用:

wait(semaphore s) { while(s==0); s -= 1;}

结果将是相同的。那为什么大多数人更喜欢使用第一个呢?

可以使用负值初始化(计数)信号量,例如让单个线程等待 5 个其他线程到达特定点:

shared:
  semaphore with counter initialised to -4
waiter thread:
  wait(semaphore)
  print "Done waiting"
other threads:
  incredible important work
  post(semaphore)

因此,您还需要检查负计数器值。

最新更新