Синхронизация C ++ 11 в обработчике сигналов Linux - PullRequest
0 голосов
/ 30 мая 2018

У меня есть многопоточное приложение для Linux, которое требуется для плавного завершения в ответ на SIGTERM.

В способе, которым оно в настоящее время реализовано, используется std::promise<void> и соответствующее будущее: основной поток сначала устанавливает простой *Обработчик 1005 *, который устанавливает обещание и возвращает, затем запускает все вспомогательные потоки и ожидает в будущем.Когда SIGTERM получено, обработчик устанавливает обещание.Это разблокирует основной поток, который управляет упорядоченным отключением вспомогательных потоков, а затем завершает работу.

Все это работает нормально - но, насколько я могу судить, на самом деле нет никаких гарантий, что безопасно использовать std::promise::set_value() (илив этом отношении любой другой механизм синхронизации C ++ 11) в обработчике сигналов.

Это на самом деле рискованно на практике?Должен ли я заменить это, например, sem_post или каким-либо другим механизмом, явно описанным как безопасный?

...