【发布时间】:2019-03-04 03:24:27
【问题描述】:
yield():https://en.cppreference.com/w/cpp/thread/yield
notify_one():http://www.cplusplus.com/reference/condition_variable/condition_variable/notify_one/
案例:
线程 A 应该完成它正在做的任何事情,然后唤醒线程 B 来完成它的工作。
我在线程 A' run() 函数中编写了一个 notify_one() 调用。
是否可能出现线程 A 发出 notify_one() 信号但即使线程 B 已准备好仍会再次调度线程 A 的情况?
notify_one() 和 yield() 是等价的吗?
【问题讨论】:
-
很明显,如果线程 A 正在等待 condvar 并且 condvar 没有发出信号,则线程 A 让出不会唤醒线程 B。
-
yield和notify_one之间没有任何共同之处。另外,“再次”是什么意思? A 继续运行。 -
在 Linux 上
yield可能对您的程序性能非常不利。它的实现假设您的线程没有其他事情可做,因此它被放置在调度优先级的最后。系统中的每个其他线程都将有机会在您产生的线程之前运行。
标签: c++ multithreading notifications yield