多个线程可以等待一个信号量吗?如果是,在信号量关闭时,将恢复哪个信号量?
发布于 2013-04-23 16:19:09
正如sem_post
的document所建议的那样,
如果此操作产生的信号量的值为零,则将允许等待信号量的阻塞线程之一从对
sem_wait()
的调用中成功返回。如果定义了符号_POSIX_PRIORITY_SCHEDULING
,则将以适合于对被阻塞线程有效的调度策略和参数的方式选择要解锁的线程。在调度器SCHED_FIFO
和SCHED_RR
的情况下,最高优先级等待线程将被解锁,并且如果有多于一个最高优先级线程被阻塞等待信号量,则等待时间最长的最高优先级线程将被解锁。如果未定义符号_POSIX_PRIORITY_SCHEDULING
,则未指定要取消阻塞的线程的选择。
此外,正如sem_wait
在应用程序使用情况部分中定义的那样,可能存在涉及具有不同优先级的线程的优先级反转的情况
发布于 2013-04-23 17:15:55
Can multiple threads wait on a single semaphore ?
是。
If yes, upon semaphore down which one will be resumed ?
就是其中的一个。哪一种依赖于OS内核实现:用于保存等待线程的容器类型。这很可能是一个先进先出队列,因此调用semaphore.wait()的第一个线程将首先被释放,但您不应该以任何依赖于此行为的方式设计您的应用程序。
发布于 2013-04-23 16:01:58
这将是计划在该特定CPU周期执行的线程。
https://stackoverflow.com/questions/16163932
复制相似问题