LINUX.ORG.RU

ожидание завершения потока


0

0

Как запустить поток и дожидаясь его завершения выполнять какие либо действия. Вот код который у меня есть, но иногда программа зависает, у меня подозрение что программа зависает из-за попытки одновременного доступа к переменной rezult.

int rezult; main() { pthread_t tid; rezult=0; pthread_create(&tid,NULL,(void*)pthread_work,NULL); while(rezult==0) { //do something } //подолжаем работу }

void* pthread_load(char *arg) { //do something rezult=1; }

anonymous

(имхо) очень плохой код.
почему? потому что (имхо) использование глобальной переменной никогда не есть хорошо. а если еще есть и потоки, то тогда вообще все превращается в "спагетти-код". Старайся избегать таких ситуаций.
Как я понял, rezult используется или как "синхронизатор". Если так, то лучше пользуй семафоры. Если же речь идет о неком разделяемом ресурсе (к которому необходимо обращаться одновременно из нескольких потоков), то выдели места явного доступа и закрой их критическими секциями (см. mutex).
Да и еще, никогда не забывай "подхватывать" дескриптор отработавшего потока (а то что будет если поток еще работает, а main уже закончилась?)
Почитай Advanced Linux Programming (поищи в гугле)
Ну уж если будут совсем проблемы, то пиши опять - скину кусок кода...
Удач.

Горыныч

anonymous
()

ну и в догонку
man pthread_create и смотри все в разделе SEE ALSO
man sem_init и опять же смотри в SEE ALSO (обрати внимание на sem_wait и sem_trywait)

горыныч

anonymous
()

Большое спасибо за совет. Попробую реализовать все это через pthread_mutex_lock() и pthread_mutex_unlock()

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