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

问题描述 投票:0回答:1

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

另外我想从另一个线程暂停这个循环保存线程,但是让其他线程继续运行,就像在程序中发生关闭而不保存数据的情况一样。

提前致谢。

c++ multithreading c++11
1个回答
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();
}
© www.soinside.com 2019 - 2024. All rights reserved.