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。

相关推荐
MSTcheng.3 分钟前
【C++】C++11新特性(三)
开发语言·c++·c++11
田野追逐星光10 分钟前
STL容器list的模拟实现
开发语言·c++·list
StandbyTime19 分钟前
《算法笔记》学习记录-第二章 C/C++快速入门
c++·算法笔记
我在人间贩卖青春25 分钟前
C++之结构体与类
c++··结构体
rainbow688926 分钟前
C++实现JSON Web计算器
c++
C++ 老炮儿的技术栈27 分钟前
Qt Creator中不写代如何设置 QLabel的颜色
c语言·开发语言·c++·qt·算法
知无不研30 分钟前
lambda表达式的原理和由来
java·开发语言·c++·lambda表达式
艾莉丝努力练剑32 分钟前
【Linux:文件】基础IO
linux·运维·c语言·c++·人工智能·io·文件
小龙报36 分钟前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
承渊政道39 分钟前
C++学习之旅【C++中模板进阶内容介绍】
c语言·c++·笔记·学习·visual studio