Как закрыть поток (библиотека pthread)? - PullRequest
3 голосов
/ 22 июня 2011

У меня есть некоторый код, примерно:

pthread_create(thread_timeout, NULL, handleTimeOut, NULL);

void handleTimeOut()
{
  /*...*/
  pthread_cancel(thread_timeout);
  /*...*/
}

Но, как я заметил в руководстве по pthread, отмена должна использоваться другими потоками.Вместо этого я попытался использовать функцию pthread_exit (), но этот поток снова зависает ...

Как правильно обрабатывать завершение протектора?Будет ли он успешно завершен, если функция handleTimeOut () просто завершится без специальных функций pthread?

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

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

0 голосов
/ 22 июня 2011

Если поток хочет завершить работу, он может либо вызвать pthread_exit(), либо вернуться к функции начального потока. Это эквивалентно.

Я не вижу причин, по которым поток не может вызвать pthread_cancel() сам по себе, но это было бы весьма необычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...