0

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

4

1 回答 1

1

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

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

于 2016-11-10T14:31:20.200 回答