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。

相关推荐
库克克5 小时前
【C++】STL 库
c++
星恒随风5 小时前
C++ 继承进阶:默认成员函数、多继承、虚继承与组合设计
开发语言·c++·笔记·学习
呜喵王阿尔萨斯6 小时前
C/C++ const -- 多义混乱
c语言·开发语言·c++
海清河晏1116 小时前
Qt实战:从零构建美化登录界面
开发语言·c++·qt
一只小灿灿6 小时前
C++ 各类特殊符号、运算符
开发语言·c++
晚风叙码6 小时前
C++ vector底层模拟实现与迭代器失效深度剖析
c++·算法
2401_8414956415 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
fqbqrr15 小时前
2607C++,soui与安卓
c++·soui
fqbqrr19 小时前
2607C++,使用微软detours勾挂工具
c++
蓝悦无人机1 天前
C++基础 — 函数总结
开发语言·c++