在C ++技术建议中,在多线程环境中暂停和恢复另一个线程中的线程

时间:2019-03-29 09:09:48

标签: c++ multithreading c++11

我想在多线程环境中练习,并且我想为一个假想的场景创建一个程序,该程序周期性地保存所生成的数据,以防止崩溃时数据丢失到文件中。因此,基本上在多线程环境中,一个线程将数据周期性地保存到文件中,并且当发生崩溃并重新启动程序时,它将从该文件中加载数据并继续运行。所以我想知道应该朝哪个方向发展?我也想知道有关此问题的设计模式。

我也想从另一个线程中暂停此周期性的保存线程,但让其他线程继续运行,例如在程序中发生关闭而不保存数据的情况。

谢谢。

1 个答案:

答案 0 :(得分:2)

我认为std::conditional_variable是您所需要的

示例:

std::mutex m;
std::condition_variable suspend_cv;
std::atomic<bool> enabled = true;

void SaveDataThread()
{
    while (enabled)
    {
         // wait for signal from other thread
         std::unique_lock<std::mutex> lock(m);
         suspend_cv.wait(lock);

         // do save the data
         if (enabled)
         {
             ...
         }
    }
}

void SomeOtherThread()
{
    // a moment to save the data
    suspend_cv.notify_one();

    // a moment to exit
    enabled = false;
    suspend_cv.notify_one();
}