C++多线程编程——条件变量wait_for的返回值含义

目录

[1. 引言](#1. 引言)

[2. wait_for的返回值含义](#2. wait_for的返回值含义)

[2.1 不带谓词的版本](#2.1 不带谓词的版本)

[2.2 带谓词的版本](#2.2 带谓词的版本)


1. 引言

条件变量std::condition_variable可以用来唤醒其他线程,也可以通过它等待其他线程唤醒自己。

在它的成员函数中,既可以通过调用wait等待其他线程,也可以使用wait_for来指定等待的时间。


其中wait_for有两种形式,一种可以带谓词,一种不带谓词。源码如下所示:

cpp 复制代码
// 这是不带谓词的版本
template< class Rep, class Period >
std::cv_status wait_for( std::unique_lock<std::mutex>& lock,
                         const std::chrono::duration<Rep, Period>& rel_time);


// 这是带谓词的版本
template< class Rep, class Period, class Predicate >
bool wait_for( std::unique_lock<std::mutex>& lock,
               const std::chrono::duration<Rep, Period>& rel_time,
               Predicate pred);

需要注意的是,他们的返回值不同,返回值的含义也不相同。

2. wait_for的返回值含义

2.1 不带谓词的版本

首先来看不带谓词的版本,返回值是std::cv_status。其定义如下,可以通过枚举值来判断是否超时。

cpp 复制代码
enum class cv_status { no_timeout, timeout };

2.2 带谓词的版本

带谓词的版本返回值是bool值,它的含义是如果经过指定的时间后谓词仍然为false,则返回false,否则返回true。

相关推荐
scx2013100420 小时前
20260105 莫队总结
c++
Q741_14720 小时前
海致星图招聘 数据库内核研发实习生 一轮笔试 总结复盘(1) 作答语言:C/C++ 链表 二叉树
开发语言·c++·经验分享·面试·笔试
咔咔咔的20 小时前
1970. 你能穿过矩阵的最后一天
c++
_OP_CHEN20 小时前
【从零开始的Qt开发指南】(十九)Qt 文件操作:从 I/O 设备到文件信息,一站式掌握跨平台文件处理
开发语言·c++·qt·前端开发·文件操作·gui开发·qt文件
CSDN_RTKLIB20 小时前
【std::map】双向迭代器说明
c++·stl
王老师青少年编程20 小时前
信奥赛C++提高组csp-s之欧拉回路
c++·算法·csp·欧拉回路·信奥赛·csp-s·提高组
No0d1es20 小时前
2025年12月 GESP CCF编程能力等级认证C++六级真题
c++·青少年编程·gesp·ccf·6级
Terrence Shen20 小时前
【CUDA编程系列】之01
c++·人工智能·深度学习·机器学习
墨有66620 小时前
数学分析栈的出栈顺序:从算法判断到数学本质(卡特兰数初探)
c++·算法·数学建模
liulilittle21 小时前
LIBTCPIP 技术探秘(tun2sys-socket)
开发语言·网络·c++·信息与通信·通信·tun