条件变量通知后的执行序列



有两个线程(称为T1和T2(通过提升条件变量和互斥锁相互同步,如下所示:

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((将首先执行的吗?

不保证。系统可以在调用notify_one()后立即执行上下文切换thread1并允许 thread2(( 运行。它可能不会。

请注意,您的代码通常是错误的,因为global_cond.wait(lock)可能会被虚假唤醒,并且tread2甚至可以在thread1()运行之前运行code_block_b()

最新更新