小编Las*_*cus的帖子

c ++条件变量通知未按预期工作

我想在前面推出新主题,只要工作worker_thread已经开始,但也许结束.我用时间延迟替换了开始和结束的工作.我的代码是:

#include <iostream>
#include <string>
#include <mutex>
#include <condition_variable>
#include <future>
#include <atomic>
#include <chrono>
#include <thread>

std::mutex m;
std::condition_variable cv;
bool started = false;

void worker_thread()
{
    std::unique_lock<std::mutex> lk(m);

    static std::atomic<int> count(1);
    std::this_thread::sleep_for(std::chrono::milliseconds{(count % 5) * 100});
    std::cerr << "Start Worker thread: " << count << "\n";

    started = true;
    lk.unlock();
    cv.notify_one();

    std::this_thread::sleep_for(std::chrono::milliseconds{3000});
    std::cerr << "Exit Worker thread: " << count << "\n";
    ++count;
}

int main()
{
    while(1) {
        std::async(std::launch::async, worker_thread);
        std::unique_lock<std::mutex> lk(m);
        cv.wait(lk, …
Run Code Online (Sandbox Code Playgroud)

c++ concurrency multithreading condition-variable c++14

11
推荐指数
1
解决办法
1126
查看次数