有两个线程(称为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();
}
假设我可以认为thread2先等待,然后thread1会进行通知。
我的问题是,code_block_a()或code_block_b()首先执行是否确定?
答案 0 :(得分:1)
不保证。系统可以在thread1
调用notify_one()
之后立即执行上下文切换,并允许thread2()运行。它可能没有。
请注意,您的代码通常是错误的,因为global_cond.wait(lock)
可能会被虚假唤醒,tread2
甚至可以在code_block_b()
运行之前运行thread1()
。