sem_post 是不是唤醒了一个随机进程
Posted
技术标签:
【中文标题】sem_post 是不是唤醒了一个随机进程【英文标题】:Does sem_post wake up a random processsem_post 是否唤醒了一个随机进程 【发布时间】:2020-12-13 09:22:39 【问题描述】:假设有 10 个进程正在使用 sem_wait() 等待一个信号量。 第 11 个进程在该信号量上调用 sem_post。 10 个进程中的哪一个会进入临界区? 是不是很随机?所有进程都会被唤醒,并努力实现锁。 CPU 将为其中一个进程提供锁,其余进程将返回等待状态
【问题讨论】:
不是 CPU,而是操作系统(更准确地说,是操作系统内核中的调度程序代码)。并且您的问题的答案取决于操作系统配置为工作的调度模式。例如,在所有线程具有相同优先级的情况下,轮询将选择最长时间脱离上下文的线程时间。 '所有进程都会被唤醒,争取实现一个锁'没有。没有必要出现这种严重的低效率。等待线程存储在信号量、树、队列等的容器中)。如果信号到达,则从容器中弹出一个线程并准备好/运行。 【参考方案1】:POSIX 标准没有指定将唤醒哪个线程。此外,如果没有人为的延迟,线程就不可能以明确定义的顺序开始等待信号量。
实际上,它可能是等待时间最长的线程,因为队列结构用于记录等待同步对象的线程。它绝对不会是一个“随机”线程。但这也不是您应该依赖代码的正确性的东西。
【讨论】:
以上是关于sem_post 是不是唤醒了一个随机进程的主要内容,如果未能解决你的问题,请参考以下文章