admin 管理员组

文章数量: 887021


2024年2月25日发(作者:一个完整的docker服务包括)

c++ 条件变量的lambda表达式用法

在C++中,条件变量(condition_variable)是用于线程间同步和通信的一种机制。条件变量通常与互斥锁(mutex)结合使用,用于等待和唤醒线程。

Lambda表达式是C++11引入的一种匿名函数语法,可以方便地在代码中定义简单的函数对象。在条件变量中,可以使用Lambda表达式来定义等待条件(wait)的谓词。

以下是使用Lambda表达式的条件变量示例:

```cpp

#include

#include

#include

std::condition_variable cv;

std::mutex mtx;

bool ready = false;

int main() {

std::thread consumer([](){

std::unique_lock lock(mtx);

(lock, [](){ return ready; }); // 使用Lambda表达式作为等待条件

std::cout << "Consumer thread: Data is ready." << std::endl;

});

std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟数据准备时间

std::unique_lock lock(mtx);

ready = true;

_one(); // 唤醒等待的线程

();

return 0;

}

```

在上述示例中,我们创建了一个消费者线程,并使用条件变量和互斥锁来实现线程的等待和唤醒。在`(lock, predicate)`中,我们使用了Lambda表达式作为等待条件。在这个Lambda表达式中,我们返回`ready`变量的值作为等待条件,当`ready`为true时,消费者线程将被唤醒。

需要注意的是,在使用Lambda表达式作为等待条件时,确保Lambda表达式返回一个可调用对象(即可转换为bool类型),以满足``的要求。

通过Lambda表达式,我们可以更方便地定义简单的等待条件,而不必编写单独的函数或函数对象。


本文标签: 条件 等待 表达式 变量 使用