多个线程可以同时等待信号量

时间:2013-04-23 07:55:30

标签: multithreading pthreads semaphore

多个线程可以在单个信号量上等待吗? 如果是,在信号量下降哪一个将恢复?

3 个答案:

答案 0 :(得分:2)

正如sem_post的{​​{3}}所示,

  

如果此操作产生的信号量值为零,则其中之一       阻止等待信号量的线程将被允许返回       成功地致电sem_wait()。如果符号_POSIX_PRIORITY_SCHEDULING       如果定义了,则将以适合的方式选择要解除阻塞的线程       阻塞线程的调度策略和参数。如果是       调度程序SCHED_FIFOSCHED_RR,优先级最高的等待线程将是       unblocked,如果有多个优先级最高的线程被阻塞等待       信号量,然后是等待时间最长的最高优先级线程       畅通无阻。如果未定义符号_POSIX_PRIORITY_SCHEDULING,则选择a       取消阻止的线程未指定。

此外,正如document应用程序使用部分中定义的那样,可能存在涉及具有不同优先级的线程的优先级倒置的情况

答案 1 :(得分:2)

Can multiple threads wait on a single semaphore ?

If yes, upon semaphore down which one will be resumed ?

正是其中之一。哪一个依赖于OS内核实现:用于保存等待线程的容器类型。这很可能是一个FIFO队列,因此第一个调用semaphore.wait()的线程将首先被释放,但你不应该以任何依赖于这种行为的方式设计你的应用程序。

答案 2 :(得分:0)

这将是计划在该特定CPU周期执行的线程。