有两个线程(称为T1和T2)通过boost条件变量和互斥锁相互同步,例如:
boost::condition_variable global_cond;
boost::mutex global_mutex;
boost::unique_lock<boost::mutex> lock( global_mutex);
thread1() {
global_cond.notify_one();
code_block_a();
}
tread2() {
global_cond.wait(lock)
code_block_b();
}
假设我可以说线程2首先等待,然后线程1将进行通知。
我的问题是,确定先执行code_block_a()还是code_block_b()?
最佳答案
不保证。系统可以在称为thread1
的notify_one()
之后立即执行上下文切换,并允许thread2()运行。而且可能不会。
请注意,您的代码通常是错误的,因为global_cond.wait(lock)
可能被虚假唤醒,并且tread2
甚至可以在code_block_b()
运行之前运行thread1()
。
关于c++ - 条件变量通知后的执行顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40529721/