Когда использовать pthread_cancel, а не pthread_kill?

Когда используется pthread_cancel , а не pthread_kill ?

25
задан Community 6 February 2019 в 09:59
поделиться

1 ответ

Я бы не использовал ни один из этих двух, но это просто личные предпочтения.

Из двух, pthread_cancel является наиболее безопасным для завершения потока, поскольку предполагается, что поток будет затронут только тогда, когда он установит для своего состояния отмены значение true с помощью pthread_setcancelstate () .

Другими словами, он не должен исчезать, удерживая ресурсы таким образом, чтобы это могло вызвать тупик. Вызов pthread_kill () отправляет сигнал определенному потоку, и это способ асинхронно воздействовать на поток по причинам, отличным от его отмены.

Большинство моих потоков все равно находятся в циклах, выполняя работу и периодически проверяя флаги, чтобы увидеть, следует ли им выйти. В основном потому, что я вырос в мире, когда pthread_kill () был опасен, а pthread_cancel () не существовал.

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

32
ответ дан 28 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: