Проблема с потоками в Shared лайбе

Тема в разделе "WASM.UNIX", создана пользователем 1amer, 24 дек 2007.

  1. 1amer

    1amer New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2007
    Сообщения:
    11
    При программировании Shared лайбы(пока для Linux но планирую портировать под BSD) столкнулся с проблемой обновления конфига с определенной периодичностью. решил из конструктора лайбы создать поток в котором конфиг обновлялся бы в бесконечном цикле с таймером но с толкнулся с такой проблемой: Поток входит в функцию pthread_cond_timedwait и уже больше не выходит из неё.
    Ткните пожалуйста носом где у меня ошибка или подскажите другой вариант решения проблемы.
    Код (Text):
    1. void * refreshconf(void * a){
    2.     struct timespec wait;
    3.     struct timeval  now;
    4.     gettimeofday(&now);
    5.     wait.tv_sec = now.tv_sec +1;
    6.     wait.tv_nsec = now.tv_usec * 1000;
    7.     while(1){
    8.         fprintf(debfile,"Thread OK\n");
    9.         pthread_cond_timedwait(&got_request, &timer_mutex, &wait);
    10.         pthread_mutex_unlock( &timer_mutex );
    11.         gettimeofday(&now);
    12.         wait.tv_sec = now.tv_sec +1;
    13.         wait.tv_nsec = now.tv_usec * 1000;
    14.     }
    15.     pthread_mutex_unlock(&a_mutex);
    16. }
     
  2. 1amer

    1amer New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2007
    Сообщения:
    11
    Код (Text):
    1.     pthread_attr_init(&tattr);
    2.     pthread_attr_setdetachstate(&tattr,PTHREAD_CREATE_DETACHED);
    3.         pthread_mutex_init(&a_mutex, NULL);
    4.         pthread_mutex_init(&timer_mutex, NULL);
    5.     int iret=pthread_create(&tid,&tattr, refreshconf, (void *)data);
    Код инициализации потока и мютексов.
    кстати с мютексами тоже проблема. поток не реагирует на запирание мютекса(pthread_mutex_lock( &a_mutex );) а тупо прёт на пролом
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    pthread_cond_timedwait() в том числе освобождает мьютекс
    а у тебя он вроде как не захвачен перед вызовом этой функции
     
  4. 1amer

    1amer New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2007
    Сообщения:
    11
    тут проблема похоже не из-за этого. походу делать с многопоточностью нормально работать недает приложение к котором я подгружаю лайбу
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    это каким таким образом?
     
  6. 1amer

    1amer New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2007
    Сообщения:
    11
    ну незнаю я в обычном приложении скомпилил тотже код - работает, а в шаред лайбе глючит
     
  7. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    значит ошибка в твоем коде
    если ошибок нет, то не важно, исполняемый ли это файл или библиотека
     
  8. 1amer

    1amer New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2007
    Сообщения:
    11
    нет похоже тут дело не в этом.в доках написано шаред лайба должна юзать libpthread_s вместо libpthread....только мне от этого не легче. по крайней мбез установкиере в моей системе (федорено горе) нету этой лайбы а мне надо чтобы мой код собирался на всех системах без сучка и задоринк...нехочу лайбу таскать за собой
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    в каких доках?
     
  10. 1amer

    1amer New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2007
    Сообщения:
    11
    http://www.cptec.inpe.br/sx4/sx4man2/g1ab02e/pthreads.3t.html
     
  11. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    1amer
    по-моему, это фигня
    напиши такой скрипт
    Код (Text):
    1. # for i in `find /lib -name '*.so*'` ; do ldd $i | grep 'libpthread' && echo $i ; done
    все динамические библиотеки используют обычный libpthread
     
  12. 1amer

    1amer New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2007
    Сообщения:
    11
    значит нужно сурсы одной из этих лайб почитать
    или ктонибудь ткните носом где у меня бага