相关疑难解决方法(0)

在调用condition_variable.notify_one()之前我是否必须获取锁定?

我对使用有点困惑std::condition_variable.我明白我必须创建unique_lock一个mutex调用之前condition_variable.wait().我无法找到是我是否也应该调用之前获得一个独特的锁notify_one()notify_all().

cppreference.com上的示例存在冲突.例如,notify_one页面提供了以下示例:

#include <iostream>
#include <condition_variable>
#include <thread>
#include <chrono>

std::condition_variable cv;
std::mutex cv_m;
int i = 0;
bool done = false;

void waits()
{
    std::unique_lock<std::mutex> lk(cv_m);
    std::cout << "Waiting... \n";
    cv.wait(lk, []{return i == 1;});
    std::cout << "...finished waiting. i == 1\n";
    done = true;
}

void signals()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::cout << "Notifying...\n";
    cv.notify_one();

    std::unique_lock<std::mutex> lk(cv_m);
    i = 1;
    while (!done) {
        lk.unlock();
        std::this_thread::sleep_for(std::chrono::seconds(1)); …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading condition-variable

72
推荐指数
3
解决办法
2万
查看次数

标签 统计

c++ ×1

condition-variable ×1

multithreading ×1