Лучший способ завершить несколько потоков при завершении работы - PullRequest
0 голосов
/ 08 июня 2018

Я ищу способы безопасного отключения нескольких потоков с заданием

while(1) {
    doAction
    sleep
}

. Я рассматриваю возможность использования логического выражения is_shutting_down, и пусть цикл while проверяет его перед сном.Тем не менее, я обеспокоен тем, что в спящем режиме при завершении работы придется подождать, пока будет выполнен спящий режим, прежде чем переменная будет проверена снова.Хотите знать, есть ли способ wakeup спящего потока и изящно выйти.

1 Ответ

0 голосов
/ 08 июня 2018

В .NET: если поток не выполняет очистку: задайте для свойства IsBackground потока значение true, и он завершится процессом.

Если очистка выполняетсяЯ рекомендую реализовать явный вызов, чтобы действительно установить логическое значение (или токен отмены при использовании Задачи в .NET). В этом случае поток, закрывающий процесс, должен будет ждать, по крайней мере, время ожидания рабочего потока, чтобыпросыпайся и убирайся.

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

...