【发布时间】:2016-09-05 05:51:12
【问题描述】:
我正在使用 POSIX,我有 3 个线程。
请注意以下所有线程都使用相同的互斥锁。
线程 1 正在使用 pthread_cond_wait 等待满足条件(等待在 while 循环内,因此它也不是无条件等待)。 当条件满足时,线程 2 将发出 pthread_cond_broadcast。 线程 3 使用互斥锁进行锁定,但不等待条件变量。
所以,线程 1 正在等待信号/广播,线程 3 正在等待互斥锁(该线程只是在等待获取互斥锁)。现在如果线程 2 发送一个广播,不知何故线程 3 正在获取互斥锁而不是线程 1。为什么会发生这种情况?我正在使用 glibc2.19 使用 debian 8.3。 广播不应该唤醒在条件变量上等待的线程吗?
【问题讨论】:
-
为什么不应该等待互斥锁的线程一旦不再被任何其他线程持有就获取它?
标签: c multithreading posix