Приостановка и возобновление потока из другого потока в многопоточной среде в технических предложениях C ++ - PullRequest
0 голосов
/ 29 марта 2019

Я хотел бы попрактиковаться в многопоточной среде и я хотел бы создать программу для воображаемого сценария, когда программа циклически сохраняет полученные данные, чтобы предотвратить потерю данных в файл в случае сбоя. Таким образом, в основном в многопоточной среде один поток циклически сохраняет данные в файл, и когда происходит сбой и программа перезапускается, она загружает данные из этого файла и может продолжать работу. Так что мне интересно, в каком направлении следует изучить? Меня также интересуют шаблоны проектирования по этому вопросу.

Также я хотел бы приостановить этот циклический поток сохранения из другого потока, но оставить другие потоки включенными, как, например, сценарий, когда в программе происходит отключение, чтобы не сохранять данные.

Заранее спасибо.

1 Ответ

2 голосов
/ 29 марта 2019

Я думаю, 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...