C:锁定pthread互斥锁是否会将线程放置在FIFO队列中?

让我们说线程1 已锁定mutex并完成了一些工作。

如果线程2 调用:

pthread_mutex_lock(&mutex);

然后线程3 调用相同的内容:

pthread_mutex_lock(&mutex);

然后线程1 解锁mutex。 FIFO(先进先出)是否适用于试图锁定mutex的线程?

如果是这样,线程2 将保证是下一个获得mutex的线程。

iCMS 回答:C:锁定pthread互斥锁是否会将线程放置在FIFO队列中?

FIFO(先进先出)是否适用于试图锁定互斥锁的线程?

不是,不能保证FIFO。

请参见https://man7.org/linux/man-pages/man3/pthread_mutex_lock.3p.html

如果有线程 在互斥对象引用的互斥对象上被阻止时 pthread_mutex_unlock()被调用,导致互斥锁变为 在可用的情况下,调度策略将确定哪个线程应 获取互斥锁。

在Linux上,pthread互斥锁是使用futex实现的,而pthread_mutex_unlock()涉及FUTEX_WAKE

无法保证唤醒哪些侍者(例如, 不能保证安排更高优先级的服务员 优先于优先级较低的服务生被唤醒。

,

这确实取决于当前的调度策略。如果是SCHED_FIFO,那么对于每个优先级,确实有一个fifo服务员列表,并且确实有futex允许这样做(请参见futexes,FUTEX_LOCK_PI节)。 SCHED_FIFO往往是用于实时应用程序的策略。上的页面

本文链接:https://www.f2er.com/1718786.html

大家都在问