我想在多线程环境中练习,并且我想为一个假想的场景创建一个程序,该程序周期性地保存所生成的数据,以防止崩溃时数据丢失到文件中。因此,基本上在多线程环境中,一个线程将数据周期性地保存到文件中,并且当发生崩溃并重新启动程序时,它将从该文件中加载数据并继续运行。所以我想知道应该朝哪个方向发展?我也想知道有关此问题的设计模式。
我也想从另一个线程中暂停此周期性的保存线程,但让其他线程继续运行,例如在程序中发生关闭而不保存数据的情况。
谢谢。
答案 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();
}