Убить поток - значит остановить все выполнение именно там, где оно есть в данный момент.В частности, он не будет выполнять никаких деструкторов.Это означает, что сокеты и файлы не будут закрыты, динамически выделенная память не будет освобождена, мьютексы и семафоры не будут освобождены и т. Д. Уничтожение потока почти гарантированно приведет к утечкам ресурсов и взаимным блокировкам.
Таким образом, ваш вопрос как бы перевернут.Настоящий вопрос должен звучать так:
Когда и при каких условиях может уничтожить поток?
Итак, вы можете убить поток, когдавы убеждены, что утечки и взаимоблокировки не может произойти, не сейчас и не тогда, когда будет изменен код другого потока (таким образом, это практически невозможно гарантировать).
В вашем конкретном случаерешение состоит в том, чтобы использовать неблокирующие сокеты и проверять какой-либо поток / специфичный для пользователя флаг между вызовами send()
и recv()
.Это, вероятно, усложнит ваш код, и, вероятно, поэтому вы сопротивлялись этому, но это правильный путь для этого.
Более того, вы быстро поймете, что подход «поток на клиент»не масштабируется, так что вы измените свою архитектуру и в любом случае перепишете ее.