2

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

4

3 回答 3

2

正如文件建议的sem_post那样,

如果此操作产生的信号量的值为零,则将允许阻塞等待信号量的线程之一从对 的调用成功返回sem_wait()。如果定义了该符号_POSIX_PRIORITY_SCHEDULING ,则将以适合于对阻塞线程有效的调度策略和参数的方式选择要解除阻塞的线程。在调度器SCHED_FIFO和的情况下SCHED_RR,最高优先级等待线程将被解除阻塞,如果有多个最高优先级线程阻塞等待信号量,则等待时间最长的最高优先级线程将被解除阻塞。如果未定义符号_POSIX_PRIORITY_SCHEDULING,则未指定要取消阻塞的线程的选择。

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

于 2013-04-23T08:19:09.110 回答
2
Can multiple threads wait on a single semaphore ?

是的。

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

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

于 2013-04-23T09:15:54.563 回答
0

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

于 2013-04-23T08:01:57.983 回答