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

标签 c++ multithreading c++11

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

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

提前致谢。

最佳答案

我认为 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();
}

关于c++ - C++技术建议中多线程环境中暂停和恢复一个线程从另一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55413919/

相关文章:

c++ - 在 Armadillo 中对立方体切片进行操作

c++ - 在头文件中使用一个类作为另一个类中的值类型

c++ - Visual Studio 项目设置中的多个相对父目录

python - C++ wxsocket TCP服务器发送无符号字符数组但python客户端在中获得4个字节

c++ - 将 void** 转换为 T** 的问题

c# - 发生故障时创建新的 ChannelFactory<T>

c# - 如何防止创建的线程多于可用的硬件线程数?

python - 读取和处理大文件时进行多线程(对于内存来说太大)

c++ - 返回值的完美转发,未定义的行为?

c++ - 我应该在我的类中的 std::vector 成员变量中使用 std::unique_ptr<T> 吗?