【发布时间】:2021-08-09 21:00:09
【问题描述】:
我发现cnd_broadcast 的奇怪行为
我运行 2 个线程,其中一个正忙于做某事。
其中一个正在等待一份新工作。
并且主线程调用cnd_broadcast 通知所有线程没有工作剩余,因此它们可以返回。
然后 main 等待 chid 线程返回thrd_join。
但并非所有子线程都会收到通知。只有在广播前等待的人才能得到通知。
和其他线程卡住等待信号。
这是它应该发生的事情吗?
【问题讨论】:
-
cnd_broadcast在 cppreference 上被描述为Unblocks all thread that currently wait on condition variable pointed to by cond -
hm... 这是预期的行为。那么,如何通知传入的线程?
-
条件变量有一个关联的互斥锁。您需要使用该互斥锁来正确同步对共享资源的访问。如果不锁定互斥锁,线程甚至不能等待条件变量。
-
cnd_wait接受 mutex 作为第二个参数。我认为它会自动完成。是吗?
标签: c multithreading thread-safety c11