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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.