【发布时间】:2013-02-11 23:11:45
【问题描述】:
当一个 mutex 已经被 T1 锁定,而 T2 试图锁定它时,T2 的流程是什么?
我认为它是这样的:
-T2 尝试锁定,失败,可能自旋锁有点,然后调用 yield...
-T2 计划执行几次,尝试锁定失败,产生...
- 最终 T1 解锁,T2 被安排执行并设法锁定互斥锁......
T1 解锁是否明确向调度程序或其他线程发出互斥锁已解锁的信号?或者它只是解锁,让调度程序在感觉合适时调度阻塞线程(又名调度程序没有阻塞线程的概念,也不将它们视为特殊)?
【问题讨论】:
-
I think互斥原则保证没有2个或更多线程同时进入临界区。现在,您是否有一个线程队列试图锁定互斥锁,或者您只是忙于等待互斥锁空闲,这取决于您如何实现它以及您对互斥锁的需求是什么。例如,mutex在 VxWorks 等 RTOS 中实现了优先级上限协议,而在通用操作系统 (GPOS) 中可能不需要。
标签: c++ c mutex implementation