有两个线程(称为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()?

最佳答案

不保证。系统可以在称为thread1notify_one()之后立即执行上下文切换,并允许thread2()运行。而且可能不会。

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

关于c++ - 条件变量通知后的执行顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40529721/

10-12 03:52
查看更多