如果在此互斥锁上阻塞多个线程时解锁posix互斥锁会发生什么?

时间:2014-04-20 20:40:49

标签: multithreading posix

thread 1:
     lock mutex1
     long time operation
     unlock mutex1

thread2:
     lock mutex1
     ...

thread3:
     lock mutex1
     ...

thread4:
     lock mutex1
     ...

threadn:
     lock mutex1
     ...

当thread1解锁mutex1时,哪个线程会被唤醒?它有标准规格吗?

2 个答案:

答案 0 :(得分:2)

使用pthread_mutex_unlock解锁posix互斥锁时,如果多个线程正在等待互斥锁,则只会唤醒其中一个。

documentation州:

  

如果在互斥锁引用的互斥锁对象上阻塞了线程   当调用pthread_mutex_unlock()时,导致互斥锁变为   可用,调度策略应确定哪个线程   获得互斥锁。

答案 1 :(得分:1)

  

当thread1解锁mutex1时,哪个线程会被唤醒?

当前在互斥锁上阻止的其他线程之一。它没有具体说明。

  

是否有标准规格?

没有。不同的系统可以以不同的方式实现它。 (有些人可能会使用简单的fifo命令来唤醒线程,其他人可能会使用启发式方法来决定唤醒哪个线程。)