|
Корректное завершение потока (pthread, Linux) |
|
|
|
 |
Ответов
|
Jun 18 2013, 03:47
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Kirill_Good @ Jun 15 2013, 14:58)  Не подскажите с реализациями завершения потоков? Нет, я все-таки подскажу!!!  Чтобы разбудить блокированный поток, пошлите ему сигнал SIGTHR: pthread_kill(thr, SIGTHR). Ой, простите. SIGTHR есть только в BSD. Похоже, в linux Вам поможет только pthread_cancel().
Сообщение отредактировал alx2 - Jun 18 2013, 04:14
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Jun 18 2013, 06:21
|
Местный
  
Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528

|
Цитата(alx2 @ Jun 18 2013, 07:47)  Нет, я все-таки подскажу!!!  Чтобы разбудить блокированный поток, пошлите ему сигнал SIGTHR: pthread_kill(thr, SIGTHR). Ой, простите. SIGTHR есть только в BSD. Похоже, в linux Вам поможет только pthread_cancel(). pthread_cancel() доходит до потока когда он натыкается на cancellation point и поток завершается после этой точки, можно добавить обработчики на выходе. Но если используется сторонняя библиотека и один из ее вызовов прервется на середине выполнения при cancel(), откуда знать что она не рухнет, когда в обработчике будет происходит освобождение ее ресурсов. Тоже самое с сигналом и его обработчиком. Или хорошая библиотека не должна так делать?) В функциях может стоять if (errno == EINTR)
Сообщение отредактировал Kirill_Good - Jun 18 2013, 06:23
|
|
|
|
|
Jun 19 2013, 06:31
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(Kirill_Good @ Jun 18 2013, 11:21)  Но если используется сторонняя библиотека и один из ее вызовов прервется на середине выполнения при cancel(), откуда знать что она не рухнет, когда в обработчике будет происходит освобождение ее ресурсов. Ниоткуда. Поток будет немедленно снят с выполнения, никакой код после заблокировавшего вызова не будет выполнен, и занятые ресурсы останутся занятыми. Если бы у Вас библиотека была в исходниках, я бы предложил использовать в ней poll/select. Но у Вас, как я понял, исходников нет. Не знаю, как в linux решить эту проблему.
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
Сообщений в этой теме
Kirill_Good Корректное завершение потока (pthread, Linux) Jun 15 2013, 09:58 alx.bilous ЦитатаНе подскажите с реализациями завершения пото... Jun 21 2013, 08:48 Kirill_Good Цитата(alx.bilous @ Jun 21 2013, 12:48) В... Jun 21 2013, 08:57  kolobok0 Цитата(Kirill_Good @ Jun 21 2013, 12:57) ... Jun 22 2013, 19:05   Kirill_Good Цитата(kolobok0 @ Jun 22 2013, 23:05) в с... Jun 23 2013, 05:39    kolobok0 Цитата(Kirill_Good @ Jun 23 2013, 09:39) ... Jun 25 2013, 13:14     Kirill_Good Цитата(kolobok0 @ Jun 25 2013, 17:14) при... Jun 25 2013, 13:31      kolobok0 Цитата(Kirill_Good @ Jun 25 2013, 17:31) ... Jul 8 2013, 10:44       Kirill_Good Давайте я расскажу ход моих мыслей, когда я читал ... Jul 8 2013, 11:05        kolobok0 Цитата(Kirill_Good @ Jul 8 2013, 15:05) .... Aug 2 2013, 15:43 firew0rker В дочернем потоке вызвать
pthread_setcanceltype(P... Jul 8 2013, 11:08 Kirill_Good Цитата(firew0rker @ Jul 8 2013, 15:08) В ... Jul 8 2013, 11:11  firew0rker Цитата(Kirill_Good @ Jul 8 2013, 17:11) а... Jul 8 2013, 12:17   Kirill_Good Цитата(firew0rker @ Jul 8 2013, 16:17) За... Jul 8 2013, 12:39    firew0rker Цитата(Kirill_Good @ Jul 8 2013, 19:39) П... Jul 8 2013, 14:53 Kirill_Good я пожалуй вежливо промолчу) Aug 2 2013, 16:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|