接上篇:C++新特性36_条件变量的使用,前面介绍了条件变量的引入和使用,本篇介绍C++中是如何封装的及如何使用?
1.条件变量在C++中的封装及使用
- condition_variable 是c++11对条件变量的封装,配合std::unique_lockstd::mutex进行wait操作。
- condition_variable_any,搭配任意带有lock、unlock语义的mutex使用,效率比condition_variable 低。
使用封装的代码:
#include <iostream>
#include <string>
#include <thread>
#include <mutex>
#include <condition_variable>
std::string str;
bool g_isSet = false;
std::mutex m;
std::condition_variable cv;
void worker_thread() {
std::cout << "Worker thread start\n";
{
std::unique_lock<std::mutex> lk(m);
cv.wait(lk, [&] {return g_isSet; });
std::cout << str.c_str() << std::endl;
}
std::cout << "Worker thread end\n";
}
int main() {
std::thread thd(worker_thread);
std::this_thread::sleep_for(std::chrono::seconds(1));
{
std::lock_guard<std::mutex> lk(m);
g_isSet = true;
str = "hello";
}
cv.notify_one();
thd.join();
std::cout << "Main thread signals end\n";
}
运行结果:
2. 学习视频地址:条件变量的C++封装
|