在发出条件变量信号时,互斥锁所有权会发生什么?

时间:2012-12-16 18:10:13

标签: multithreading concurrency concurrent-programming

  1. 线程 T1 锁定互斥锁 M 并等待条件 C (释放 M )。< / p>

  2. 线程 T2 锁定互斥锁 M 并发出条件 C

  3. 在文献中,声明一旦发出 C T1 就会醒来并重新获取 M

    我对 T2 所发生的事情表示怀疑,因为它在信号 C 之前获得 M

    T2 在发出信号之前获得的 M 会发生什么?

    1. T1 是否已准备好但已被阻止,仅在 T2 发布 M 之后才会执行,以便重新获取?

    2. T1 是否已准备好并在 T2 被阻止之前执行,直到 M 被释放,才能重新获取?

    3. 他们只是同时执行, T1 M 获得, T2 M 释放(或还获得了?)

1 个答案:

答案 0 :(得分:0)

发信号通知条件C唤醒线程T1,然后它必须通过锁定它来重新获取互斥锁M.为了做到这一点,T2必须先释放M.

所以答案是,T1唤醒信号,等待获取M,T2释放M,T1获取M,T1和T2同时执行。