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。

相关推荐
MaisieKim_几秒前
如何实现 C/C++ 与 Python 的通信
c语言·c++·python
1001101_QIA1 小时前
【QT】理解QT机制之“元对象系统”
开发语言·c++·qt·算法
a东方青2 小时前
[蓝桥杯C++ 2024 国 B ] 立定跳远(二分)
c++·算法·蓝桥杯·c++20
2501_915373883 小时前
Java调用C++教程:JNI与JNA两种方式详解
java·开发语言·c++
LuckyRich13 小时前
【cpp-httplib】 安装与使用
c++·http
中微子3 小时前
从C++看JavaScript闭包:执行上下文与作用域的跨语言对比
前端·c++
希望_睿智3 小时前
实战设计模式之建造者模式
c++·设计模式·架构
@曲终4 小时前
C++:栈帧、命名空间、引用
java·开发语言·c++·经验分享·笔记
強云4 小时前
原子操作(C++)
c++
敲代码的瓦龙5 小时前
C++?多态!!!
c语言·开发语言·c++·windows·后端