При программировании Shared лайбы(пока для Linux но планирую портировать под BSD) столкнулся с проблемой обновления конфига с определенной периодичностью. решил из конструктора лайбы создать поток в котором конфиг обновлялся бы в бесконечном цикле с таймером но с толкнулся с такой проблемой: Поток входит в функцию pthread_cond_timedwait и уже больше не выходит из неё. Ткните пожалуйста носом где у меня ошибка или подскажите другой вариант решения проблемы. Код (Text): void * refreshconf(void * a){ struct timespec wait; struct timeval now; gettimeofday(&now); wait.tv_sec = now.tv_sec +1; wait.tv_nsec = now.tv_usec * 1000; while(1){ fprintf(debfile,"Thread OK\n"); pthread_cond_timedwait(&got_request, &timer_mutex, &wait); pthread_mutex_unlock( &timer_mutex ); gettimeofday(&now); wait.tv_sec = now.tv_sec +1; wait.tv_nsec = now.tv_usec * 1000; } pthread_mutex_unlock(&a_mutex); }
Код (Text): pthread_attr_init(&tattr); pthread_attr_setdetachstate(&tattr,PTHREAD_CREATE_DETACHED); pthread_mutex_init(&a_mutex, NULL); pthread_mutex_init(&timer_mutex, NULL); int iret=pthread_create(&tid,&tattr, refreshconf, (void *)data); Код инициализации потока и мютексов. кстати с мютексами тоже проблема. поток не реагирует на запирание мютекса(pthread_mutex_lock( &a_mutex ) а тупо прёт на пролом
pthread_cond_timedwait() в том числе освобождает мьютекс а у тебя он вроде как не захвачен перед вызовом этой функции
тут проблема похоже не из-за этого. походу делать с многопоточностью нормально работать недает приложение к котором я подгружаю лайбу
нет похоже тут дело не в этом.в доках написано шаред лайба должна юзать libpthread_s вместо libpthread....только мне от этого не легче. по крайней мбез установкиере в моей системе (федорено горе) нету этой лайбы а мне надо чтобы мой код собирался на всех системах без сучка и задоринк...нехочу лайбу таскать за собой
1amer по-моему, это фигня напиши такой скрипт Код (Text): # for i in `find /lib -name '*.so*'` ; do ldd $i | grep 'libpthread' && echo $i ; done все динамические библиотеки используют обычный libpthread