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。

相关推荐
一匹电信狗40 分钟前
C/C++内存管理:深入理解new和delete
c语言·开发语言·c++·ide·算法·visualstudio
萌の鱼2 小时前
leetcode 3008. 找出数组中的美丽下标 II
数据结构·c++·算法·leetcode
陌然。。2 小时前
【542. 01 矩阵 中等】
c++·笔记·算法·leetcode·矩阵·广度优先
SuperCandyXu3 小时前
leetcode0010 正则表达式匹配 - hard
c++·算法·leetcode
要好好养胃3 小时前
C++11新特性 thread线程类
开发语言·c++
缘来的精彩3 小时前
Android framwork 详细开发指南
android·c++·framwork
努力的小帅4 小时前
c/c++内存管理
开发语言·c++
ceffans4 小时前
PDF文档中表格以及形状解析
开发语言·c++·windows·pdf
心态与习惯5 小时前
c++ 中的容器 vector 与数组 array
c++·容器·vector·array