|
Корректное завершение потока (pthread, Linux) |
|
|
|
 |
Ответов
|
Jul 8 2013, 11:11
|
Местный
  
Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528

|
Цитата(firew0rker @ Jul 8 2013, 15:08)  В дочернем потоке вызвать pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); перед вызовом блокируемой функции. Тогда дочерний поток может быть завершен с помощью pthread_cancel в любой момент, в т.ч. когда висит на вызове блокируемой функции. а где освобождить ресуры?
|
|
|
|
|
Jul 8 2013, 12:17
|
Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716

|
Цитата(Kirill_Good @ Jul 8 2013, 17:11)  а где освобождить ресуры? Зависит от конкретной реализации. Наверное, там же, где вызывается pthread_cancel.
|
|
|
|
|
Jul 8 2013, 12:39
|
Местный
  
Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528

|
Цитата(firew0rker @ Jul 8 2013, 16:17)  Зависит от конкретной реализации. Наверное, там же, где вызывается pthread_cancel. Просто тогда pthread_cancel может прервать вызов библиотеки в середине. Нет гаранитии 100 %, что вызов не меняет какие структуры , какие будут использоваться при освобождении. Вдруг cancel прервет как раз в этом момент, и при lib::free() приложение рухнет.
|
|
|
|
|
Jul 8 2013, 14:53
|
Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716

|
Цитата(Kirill_Good @ Jul 8 2013, 19:39)  Просто тогда pthread_cancel может прервать вызов библиотеки в середине. Нет гаранитии 100 %, что вызов не меняет какие структуры , какие будут использоваться при освобождении. Вдруг cancel прервет как раз в этом момент, и при lib::free() приложение рухнет. Если есть исходники этой библиотеки и возможность править их, то проблемы решаемы. Например, когда освобождается ресурс, обнулять указатель на него. После прерывания потока проверять указатели и не делать free тем которые ==NULL. А нет - тогда ничего не поделаешь. Разве что намеренно не делать free и пусть висит в памяти. Если не очень много занимает - фиг с ним.
|
|
|
|
Сообщений в этой теме
Kirill_Good Корректное завершение потока (pthread, Linux) Jun 15 2013, 09:58 alx2 Цитата(Kirill_Good @ Jun 15 2013, 14:58) ... Jun 18 2013, 03:47 Kirill_Good Цитата(alx2 @ Jun 18 2013, 07:47) Нет, я ... Jun 18 2013, 06:21  alx2 Цитата(Kirill_Good @ Jun 18 2013, 11:21) ... Jun 19 2013, 06:31 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 Kirill_Good я пожалуй вежливо промолчу) Aug 2 2013, 16:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|