std::condition_variable
std::condition_variable
是条件变量,当std::condition_variable
对象的某个wait
函数被调用的时候,它使用 std::unique_lock
(通过 std::mutex
) 来锁住当前线程。当前线程会一直被阻塞,直到另外一个线程在相同的 std::condition_variable
对象上调用了notification
函数来唤醒当前线程。
1 | #include <iostream> // std::cout |
只有当 pred 条件为false 时调用 wait() 才会阻塞当前线程,并且在收到其他线程的通知后只有当 pred 为 true 时才会被解除阻塞。
1 | #include <iostream> // std::cout |
与std::condition_variable::wait()
类似,不过 wait_for
可以指定一个时间段,在当前线程收到通知或者指定的时间 rel_time 超时之前,该线程都会处于阻塞状态。而一旦超时或者收到了其他线程的通知,wait_for
返回,剩下的处理步骤和wait()
类似。
1 | #include<iostream> |
std::condition_variable_any
与 std::condition_variable
类似,只不过std::condition_variable_any
的 wait 函数可以接受任何 lockable参数,而 std::condition_variable
只能接受 std::unique_lock
类型的参数