Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Состояние pthread потока / 17 сообщений из 17, страница 1 из 1
09.10.2007, 12:24:55
    #34856399
Dronord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
День добрый.

Как вы определяете, жив поток или уже завершился? pthread_join-то блокирующий =(

Мне нужно узнать, не завершился ли поток аварийно. Конечно, могу использовать свой флаг для проверки этого состояния, но неужели нет такой ф-ии pthread_*() ?

Использование альтернативной библиотеки с потоками как-то не привлекательно.
...
Рейтинг: 0 / 0
09.10.2007, 15:02:56
    #34857110
Dronord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
Коллеги, это делает ф-я pthread_kill с сигналом = 0!
man pthread_kill вобщем =)
...
Рейтинг: 0 / 0
09.10.2007, 15:10:08
    #34857156
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
То самое, что тебе надо
...
Рейтинг: 0 / 0
09.10.2007, 15:15:12
    #34857183
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
DronordКоллеги, это делает ф-я pthread_kill с сигналом = 0!
man pthread_kill вобщем =)

Хм. А если поток был завершен, но не отдетачен? Тогда он будет существовать и ошибки, возможно, ESRCH не возникнет.

Или я что-то не верно понял?
...
Рейтинг: 0 / 0
09.10.2007, 15:19:14
    #34857207
Dronord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
Детач я не использую. В мане никаких оговорок о детаче нет. Ф-я 100% работает для потока без обособления, проверил уже.
...
Рейтинг: 0 / 0
09.10.2007, 15:24:47
    #34857233
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
DronordДетач я не использую. В мане никаких оговорок о детаче нет. Ф-я 100% работает для потока без обособления, проверил уже.

Можешь привести свой ман? У меня:
автор
PTHREAD_SIGNAL(3) PTHREAD_SIGNAL(3)
...
DESCRIPTION
...
pthread_kill send signal number signo to the thread thread. The signal is delivered and handled as described in
kill(2).
...
ERRORS
...
The pthread_kill function returns the following error codes on error:

EINVAL signo is not a valid signal number

ESRCH the thread thread does not exist (e.g. it has already terminated)


KILL(2) Linux Programmer’s Manual KILL(2)
...
ОПИСАНИЕ
...
Если sig равен 0, то сигнал не посылается, но выполняется проверкана возникновение ошибок в процессе.
...
НАЙДЕННЫЕ ОШИБКИ
EINVAL Задан неправильный тип сигнала.

ESRCH Процесс или группа не существуют. Заметьте, что существующий процесс можетбыть зомби-процессом, который ужепод
ал запрос на завершение работы, но ещене прошел через функцию wait().


EPERM У процесса нет достаточных прав для того, чтобы послать сигналыодному из процессов-получателей. Для того, чтоб
ы процесс мог послать сигнал процессу pid, он должен либо иметь привилегии root, либо его реальныйили эффективн
ый идентификатор пользователя должен быть равенреальному или сохраненному при помощи set-user-ID идентификатору
пользователя процесса-получателя. В случае с SIGCONT, для посылки и приема сигнала процессу достаточнобыть час
тью этой же сессии.
...
Рейтинг: 0 / 0
09.10.2007, 15:25:54
    #34857239
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
Я не спорю, что твоя находка работает. Я хотел бы разобраться.
...
Рейтинг: 0 / 0
09.10.2007, 15:36:38
    #34857295
Dronord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
У меня солярис: http://www.opennet.ru/man.shtml?topic=pthread_kill&category=3&russian=4
Единственное опасение при использовании этой ф-ии: нельзя ни в одном потоке устанавливать функцию-обработчик нулевого сигнала. Иначе процесс завершится.
...
Рейтинг: 0 / 0
09.10.2007, 15:53:59
    #34857381
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
DronordУ меня солярис: http://www.opennet.ru/man.shtml?topic=pthread_kill&category=3&russian=4
Единственное опасение при использовании этой ф-ии: нельзя ни в одном потоке устанавливать функцию-обработчик нулевого сигнала. Иначе процесс завершится.

Да, скудно как то.

автор
PTHREAD_JOIN(3) PTHREAD_JOIN(3)

NAME
pthread_join - wait for termination of another thread

SYNOPSIS
#include <pthread.h>

int pthread_join(pthread_t th, void **thread_return);

DESCRIPTION
pthread_join suspends the execution of the calling thread until the thread identified by th terminates, either by
calling pthread_exit(3) or by being cancelled.

If thread_return is not NULL, the return value of th is stored in the location pointed to by thread_return. The
return value of th is either the argument it gave to pthread_exit(3), or PTHREAD_CANCELED if th was cancelled.

The joined thread th must be in the joinable state: it must not have been detached using pthread_detach(3) or the
PTHREAD_CREATE_DETACHED attribute to pthread_create(3).

When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until
another thread performs pthread_join on it.
Therefore, pthread_join must be called once for each joinable thread cre-
ated to avoid memory leaks.

At most one thread can wait for the termination of a given thread. Calling pthread_join on a thread th on which
another thread is already waiting for termination returns an error.


Вообщем, согласен с твоим вариантом. На процесс зомби pthread_kill не будет обращать внимания (будет возвращать ошибку).
...
Рейтинг: 0 / 0
09.10.2007, 16:19:40
    #34857489
Dronord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
Поскольку в линуксе потоки реализованы как процессы, то тебе актуальна тема про зомби, а вообще потоки могут быть в состоянии зомби? /-)
...
Рейтинг: 0 / 0
09.10.2007, 17:00:24
    #34857717
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
DronordПоскольку в линуксе потоки реализованы как процессы, то тебе актуальна тема про зомби, а вообще потоки могут быть в состоянии зомби? /-)

Х/з. Просто так не оговаривали бы.
...
Рейтинг: 0 / 0
09.10.2007, 17:36:43
    #34857880
Dronord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
Где оговаривают зомби?
...
Рейтинг: 0 / 0
09.10.2007, 18:27:01
    #34858087
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
DronordГде оговаривают зомби?

В первой части первого мною приведенного мана.
...
Рейтинг: 0 / 0
09.10.2007, 18:42:55
    #34858142
Dronord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
Ааа, это для линукса.
...
Рейтинг: 0 / 0
10.10.2007, 12:03:20
    #34859668
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
DronordПоскольку в линуксе потоки реализованы как процессы, то тебе актуальна тема про зомби, а вообще потоки могут быть в состоянии зомби? /-)

Могут. Зомби это любой связанный (attached) процесс/поток, который уже завершился и код его завершения не был прочитал - тем самым мы принуждаем операционную систему резервировать запись об уже канувшем в лету процессе/потоке на случай если все же кто-то прийдет за кодом завершения.
...
Рейтинг: 0 / 0
10.10.2007, 12:54:35
    #34859911
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
Вчера до 23 экспериментировал, нормально все. Про завершенный и неприсоединненый поток kill возвращает ESRCH, на отсоединенный и завершенный тоже ESRCH/ Ghfdlf солярки дома нет, на Linuxe тренировался
...
Рейтинг: 0 / 0
10.10.2007, 13:04:11
    #34859948
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Состояние pthread потока
blindedВчера до 23 экспериментировал, нормально все. Про завершенный и неприсоединненый поток kill возвращает ESRCH, на отсоединенный и завершенный тоже ESRCH/ Ghfdlf солярки дома нет, на Linuxe тренировался

Я тоже так понял. Понятие terminate, означает, что поток завершил свое выполнение, но еще не дошел до стадии уничтожения. kill/pthread_kill 0 же возвращает 0, только если поток еще не terminate, т.е. не "закончил".

Остается только загадкой, почему в фильмах про терминатора, терминатор не "заканчивал" (сажал в тюрьму ;) ), а убивал (отсоединял от мира).
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Состояние pthread потока / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]