如何让一个线程在自己调用的另一个线程上等待

时间:2018-11-29 07:18:42

标签: multithreading c++11 condition-variable stdthread stdmutex

我对多线程和c ++ 11线程库还很陌生。 我有一种情况,希望您能继续前进。

我有2个线程(例如“ thread1”和“ thread2”),因此“ thread1”调用“ thread2”,并且它应在某种条件下等待,直到由“ thread2”实现或经过特定时间为止。

在这种情况下,事物的耦合在这里值得注意。首先,总是“ thread1”会在某些条件或时间限制下调用并等待“ thread2”。其次,“ thread2”在任何时候都不会调用“ thread1”。

我尝试了以下解决方案:

bool condition = false;
std::mutex mtx;
std::condition_variable cv;

void thread1()
{
    std::string str = "string";
    std::unique_lock<std::mutex> lck(mtx);
    thread2(str);

    while(!condition)
    {
        cv.wait(lck);   // or let's say 60 seconds elapsed
    }

    std::cout << "condition reached" << std::endl;
}

void thread2(const std::string& str)
{
    calls_some_other_function(str);
    std::unique_lock<std::mutex> lck(mtx);
    condition = true;
    cv.notify_one();
}

现在,这是正确的实现吗?我对这种实现方式的疑问是,如何确保“ thread2”始终在“ thread1”开始等待之后返回,否则它将永远保持等待状态或退出计时器(比如说60秒),甚至虽然条件令人满意?

请在这里帮助。

0 个答案:

没有答案