реклама на сайте
подробности

 
 
> Корректное завершение потока (pthread, Linux)
Kirill_Good
сообщение Jun 15 2013, 09:58
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Добрый день!

Не подскажите с реализациями завершения потоков? Как обработать такую ситуацию : дочерний поток висит на вызове блокируемой функции из third-party библиотеки. Родительский поток хочет его завершить. Как сделать? Учитывать корректное освобождение ресурсов.

Api: pthread, система: Linux

Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
firew0rker
сообщение Jul 8 2013, 11:08
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



В дочернем потоке вызвать
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
перед вызовом блокируемой функции.
Тогда дочерний поток может быть завершен с помощью pthread_cancel в любой момент, в т.ч. когда висит на вызове блокируемой функции.
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Jul 8 2013, 11:11
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Цитата(firew0rker @ Jul 8 2013, 15:08) *
В дочернем потоке вызвать
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
перед вызовом блокируемой функции.
Тогда дочерний поток может быть завершен с помощью pthread_cancel в любой момент, в т.ч. когда висит на вызове блокируемой функции.


а где освобождить ресуры?
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Jul 8 2013, 12:17
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Цитата(Kirill_Good @ Jul 8 2013, 17:11) *
а где освобождить ресуры?

Зависит от конкретной реализации. Наверное, там же, где вызывается pthread_cancel.
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Jul 8 2013, 12:39
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Цитата(firew0rker @ Jul 8 2013, 16:17) *
Зависит от конкретной реализации. Наверное, там же, где вызывается pthread_cancel.


Просто тогда pthread_cancel может прервать вызов библиотеки в середине. Нет гаранитии 100 %, что вызов не меняет какие структуры , какие будут использоваться при освобождении. Вдруг cancel прервет как раз в этом момент, и при lib::free() приложение рухнет.
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Jul 8 2013, 14:53
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Цитата(Kirill_Good @ Jul 8 2013, 19:39) *
Просто тогда pthread_cancel может прервать вызов библиотеки в середине. Нет гаранитии 100 %, что вызов не меняет какие структуры , какие будут использоваться при освобождении. Вдруг cancel прервет как раз в этом момент, и при lib::free() приложение рухнет.

Если есть исходники этой библиотеки и возможность править их, то проблемы решаемы. Например, когда освобождается ресурс, обнулять указатель на него. После прерывания потока проверять указатели и не делать free тем которые ==NULL.
А нет - тогда ничего не поделаешь. Разве что намеренно не делать free и пусть висит в памяти. Если не очень много занимает - фиг с ним.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016