LINUX.ORG.RU

Неблокирующийся pthread_join()


0

0

Писал программулину на процессах, но в итоге надо бы использовать потоки. Столкнулся с такой проблемой - нигде не могу найти документации по неблокирующий функции, которая могла бы сообщить - завершился какой-либо поток или нет. Можно хотя бы про один поток, но важно, чтоб вызов был неблокирующий.
Всем заранее спасибо.

★★★★★
Ответ на: комментарий от mv

К сожалению в моем руководстве нет ничего про pthread_tryjoin_np. Возможно эта ф-ия ставится с определенной версией баблиотек или ядра. К сожалению в этих вопросах я не до конца спец.

trex6 ★★★★★
() автор топика

Тебе именно неблокирующийся pthred_join, или дождаться завершения нити без блокировки?

tailgunner ★★★★★
()
Ответ на: комментарий от trex6

volatile long i_am_dead = 0;

void* foo(void*)
{
...
    i_am_dead = 1;
}

int main()
{
    pthread_t p;
    pthread_create(&p, NULL, foo, NULL);
    ...
// check i_am_dead != 0    
}

Ещё можно на коллбэках или сигналах сделать. Море вариантов.

А тебе точно треды нельзя в detached состоянии создавать, чтобы с join'ом не заморачиваться?

mv ★★★★★
()
Ответ на: комментарий от mv

Просто в программулине будет верхний потолок потоков. А веь массив гонять постоянно для проверки, да потом еще и смотреть какой именно и это все отслеживать. Думал обойтись системным вызовом в надежде на его большую работоспособность. Все равно спасибо за свеит, наверное так и придется реализовывать...

trex6 ★★★★★
() автор топика
Ответ на: комментарий от MiracleMan

Спасибо за маны по функциям, попробовал их использовать в программе - все работает. Странно, что их man-pages в системе не нашлись...

trex6 ★★★★★
() автор топика

Заводим pthread_cond. Запускаем потоки в детаче. Перед завершением поток сигнализирует в этот cond. Можно ещё завести, грубо говоря, массив bool'ов, в котором поток отмечает себя перед сигналом, чтобы можно было различить.

const86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.