c++ - C++ 技术建议中的多线程环境中从另一个线程暂停和恢复一个线程
问题描述
我想在多线程环境中练习,我想为一个想象的场景创建一个程序,当程序循环保存生成的数据以防止崩溃时数据丢失到文件中。因此,基本上在多线程环境中,一个线程将数据循环保存到文件中,当发生崩溃并重新启动程序时,它将从该文件加载数据并继续运行。所以我想知道应该往哪个方向看?我也想知道关于这个问题的设计模式。
此外,我想从另一个线程暂停这个循环保存线程,但让其他线程继续运行,就像程序中发生关闭而不保存数据的情况一样。
提前致谢。
解决方案
我认为这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();
}
推荐阅读
- excel - EXCEL VBA 运行时错误5:无效的过程调用或参数
- substrate - 验证器的修剪模式
- swift - 尝试根据数字变量(即温度)显示不同的 print() 消息
- flutter - 如何在windows的flutter中获取主机名?
- javascript - 关于 JS 集的详细信息
- python - 安装/导入 gdal 时出错(没有名为“osgeo”的模块)
- swift - SwiftUI:编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式
- c - 读取没有二维数组的文件并计算行数和列数
- sql - 如何计算 SQL Server 中两个数据集的总套利?
- javascript - 在第一次出现字符之前插入字符串