多个线程可以在单个信号量上等待吗? 如果是,在信号量下降哪一个将恢复?
答案 0 :(得分:2)
正如sem_post
的{{3}}所示,
如果此操作产生的信号量值为零,则其中之一 阻止等待信号量的线程将被允许返回 成功地致电
sem_wait()
。如果符号_POSIX_PRIORITY_SCHEDULING
如果定义了,则将以适合的方式选择要解除阻塞的线程 阻塞线程的调度策略和参数。如果是 调度程序SCHED_FIFO
和SCHED_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周期执行的线程。