条件变量通知

时间:2016-11-10 14:14:35

标签: c++ multithreading boost-mutex

有两个线程(称为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()首先执行是否确定?

1 个答案:

答案 0 :(得分:1)

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

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