C++条件变量wait方法的误区
查看GitHub上的ThreadPool时发现以前理解上的一个误区。
wait
的重载
C++条件变量用于等待的相关方法wait
、wait_for
、wait_until
存在一个重载参数Predicate pred
:
|
|
cppreference对其的说明:
wait
导致当前线程阻塞直至条件变量被通知,或虚假唤醒发生。可以提供pred
以检测虚假唤醒。
上面的重载等价于:
|
|
因此如果开始等待时,pred
已经为真,即使不唤醒也会立刻退出等待。
我之前以为这个条件只会在唤醒时才检查一次,也就是必须在唤醒后,同时满足该条件,才会退出等待。
虽然对于二者的不同理解写出来的程序逻辑一般都差不多,但是可能会误导作者对满足pred
条件的等待导致的阻塞进行特殊处理。
感想
C++细节真多啊,基础不牢,地动山摇,还须勤加学习。