|
Корректное завершение потока (pthread, Linux) |
|
|
|
 |
Ответов
|
Jun 21 2013, 08:48
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 18-03-12
Пользователь №: 70 865

|
Цитата Не подскажите с реализациями завершения потоков? Как обработать такую ситуацию : дочерний поток висит на вызове блокируемой функции из third-party библиотеки. Родительский поток хочет его завершить. Как сделать? Учитывать корректное освобождение ресурсов. Вы можете просто убить поток, а освободить ресурсы в том месте где убили, но для этого надо иметь явный контекст потока
|
|
|
|
|
Jun 21 2013, 08:57
|
Местный
  
Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528

|
Цитата(alx.bilous @ Jun 21 2013, 12:48)  Вы можете просто убить поток, а освободить ресурсы в том месте где убили, но для этого надо иметь явный контекст потока а не будет ли это одно и тоже, что и освободить ресурсы в обработчиках при завершении? Явный контекст потока , вы имели ввиду, что ясно представлять код? Вроде как напрашивается только одно решение: делать код потока неблокируемым.
|
|
|
|
|
Jun 23 2013, 05:39
|
Местный
  
Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528

|
Цитата(kolobok0 @ Jun 22 2013, 23:05)  в сторонней библиотеке должна быть функция старта-останова стороннего потока. а есть пример какой-нибудь?
|
|
|
|
|
Jun 25 2013, 13:14
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Kirill_Good @ Jun 23 2013, 09:39)  .. пример.. пример чего? вызов функции или параметров возвращаемых? Или потроха самой функции? сами функции чего-то аля (без привязки к юниксу или языку). Код HANDLE Start();
error Stop(HANDLE); внутри - уже в зависимости от внутренней структуры библиотеки идёт запуск параллельных ниток либо их останов, в зависимости от логики. Если старт - захват ресурсов(если нужен), старт ниток, ожидание успешного старта ниток(в нитках может быть свой завхват ресурсов, который в зависимости от ОС может _не_ наследовать ресурсы парента), выход с кодом возврата. Если останов - сигнализация ниткам об их остановке. Ожидание пока нитки остановятся (выйдут из цикла, освободят ресурсы, если занимали), освобождение общих ресурсов (если таковые захватывались), выход с кодом возврата. где то так. особо отмечу _синхронную_фазу_старта_и_останова_ ниток. Типичная ошибка многих программистов не дожидаться подъёма и готовности ниток. Отсюда, при высокой нагрузке (ударной) по системе - идёт дрейф привычных временных интервалов. Или по другому. Если не ожидается успешность старта и начала работы нитки - то нафига её вообще порождать?
|
|
|
|
|
Jun 25 2013, 13:31
|
Местный
  
Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528

|
Цитата(kolobok0 @ Jun 25 2013, 17:14)  пример чего? вызов функции или параметров возвращаемых? Или потроха самой функции? сами функции чего-то аля (без привязки к юниксу или языку). Код HANDLE Start();
error Stop(HANDLE); Вы наверно невнимательно прочитали тему. Вы дали "пример" функций о реализации которых тема и заводилась. Как вы сами описали, что эти функции часть api библиотеки. Где же место пользовательскому коду здесь?) Согласен с ситауцией допустим воспроизведение видео файла lib::start("file_path"); lib::stop(); Но такой простой api почти всегда не прокатывает. Такие функции носят больше reference характер, чем использование в рабочем коде. Также не все библиотеки имеют такой реферс. Всегда приходится реализовывать их самому. Вот об этом и вопрос. О конктретной части правда, как в функции stop() реализовать корректый останов потока?
|
|
|
|
Сообщений в этой теме
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      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
|
|
|