首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个线程可以同时等待一个信号量

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

Stack Overflow用户
提问于 2013-04-23 15:55:30
回答 3查看 5.4K关注 0票数 2

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

EN

回答 3

Stack Overflow用户

发布于 2013-04-23 16:19:09

正如sem_postdocument所建议的那样,

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-04-23 17:15:55

代码语言:javascript
运行
复制
Can multiple threads wait on a single semaphore ?

是。

代码语言:javascript
运行
复制
If yes, upon semaphore down which one will be resumed ?

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

票数 2
EN

Stack Overflow用户

发布于 2013-04-23 16:01:58

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16163932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档