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。

相关推荐
白色冰激凌33 分钟前
[SECS/GEM研究] (六)SML与数据序列化
c++·secs/gem
_小柏_43 分钟前
总结下最近面试出现的问题
c++·面试
我是慎独1 小时前
VulkanSceneGraph学习教程(十一)
c++·学习
stolentime1 小时前
AT_agc066_a [AGC066A] Adjacent Difference题解
c++·算法·贪心算法·构造
程序猿编码2 小时前
不用PyTorch,我用C++手写了一个能认手写数字的神经网络
c++·pytorch·神经网络·大模型
不会代码的小猴2 小时前
4. 控件学习2
开发语言·c++·笔记·qt
闻道且行之3 小时前
图片处理助手|C++ 手搓离线 AI 抠图工具,U2Net 原理到落地一次讲透
开发语言·c++·人工智能·神经网络·opencv·计算机视觉
玖釉-3 小时前
nvpro_core2 源码与架构解析:NVIDIA Vulkan 图形开发基础框架
c++·windows·图形渲染
啦啦啦啦啦zzzz3 小时前
高级I/O函数(一)
linux·服务器·网络·c++·网络编程
笨鸟先飞的橘猫4 小时前
c++游戏后端开源框架学习——wukong(十、lua热更新)
c++·游戏·开源