The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Проблема с работой библиотеки libpthread.so (NPTL), !*! Sergio_anufriev, 03-Июн-11, 15:18  [смотреть все]
Здравствуйте.

У меня возникла проблема с работой потоков на целевой платформе armv5t, (компилятор arm-none-linux-gnueabi, glibc-2.3.6+NPTL). Дело в том, что по непонятным причинам, после захвата mutex поток больше не просыпается, хотя другие потоки по несколько раз уже захватили и освободили этот muntex.

Проблема еще больше заводит меня в тупик, так как этот же самый код работает отлично уже давно на другой платформе (компилятор arm-softfloat-linux-gnu, glibc-2.3.6+linuxthreads).

Пытался собрать glibc-2.5+linuxthreads, но потерпел фиаско, не хватает опыта и знаний.

Может кто-нибудь сталкивался с подобной проблемой, или может подсказать где достать или как собрать glibc-2.5+linuxthreads.

Или хотя бы просветите  чем объяснить такое поведение.

Заранее благодарю.

  • Проблема с работой библиотеки libpthread.so (NPTL), !*! Вова, 16:46 , 03-Июн-11 (1)
    >[оверквотинг удален]
    > захвата mutex поток больше не просыпается, хотя другие потоки по несколько
    > раз уже захватили и освободили этот muntex.
    > Проблема еще больше заводит меня в тупик, так как этот же самый
    > код работает отлично уже давно на другой платформе (компилятор arm-softfloat-linux-gnu,
    > glibc-2.3.6+linuxthreads).
    > Пытался собрать glibc-2.5+linuxthreads, но потерпел фиаско, не хватает опыта и знаний.
    > Может кто-нибудь сталкивался с подобной проблемой, или может подсказать где достать или
    > как собрать glibc-2.5+linuxthreads.
    > Или хотя бы просветите  чем объяснить такое поведение.
    > Заранее благодарю.

    Размытое описание проблемы, могу сказать только "где достать или как собрать" glibc со старыми linuxthreads.
    Работающие сочетания glibc, ядра и компилятора gcc  создаются при помощи кросстулзов;
    Самый удобный пакет для создания работающих тулчейнов это  http://crosstool-ng.org/. Грубо говоря семейство компиляторов версий от  x до y  будет работать с глибс версий от а до б,  и ну и глибс будет требовать версии ядра.

    • Проблема с работой библиотеки libpthread.so (NPTL), !*! Sergio_anufriev, 19:14 , 05-Июн-11 (4)
      Спасибо Вова. Сейчас усердно пробую собрать хоть что-нибудь использую указанный тобою инструмент, но не все так гладко...
      На счет работоспособности, у меня такое субъективное ошущение, что нет (в NPTL) очереди блокирования примитивов синхронизации, что-то типо того.


    • Проблема с работой библиотеки libpthread.so (NPTL), !*! Sergio_anufriev, 12:13 , 06-Июн-11 (5)
      Вова, если тебе не сложно, подскажи решение проблемы. Я воспользовался пакетом  crosstool-ng. Взял готовый конфигурационный файл для arm-unknown-linux-gnueabi. Заменил в нем библиотеке на glibc-2.5 c linuxthreads. На шаге:
      Installing C library headers & start files
      [EXTRA]    Configuring C library

      у меня ошибка:

      configure: error:
      [CFG  ]    *** These critical programs are missing or too old: as ld
      [CFG  ]    *** Check the INSTALL file for required versions.

      я не знаю, как исправить эту версионную ошибку. Может у меня не правильное сочетание версий компилятора и других утилит...

      Заранее спасибо.

  • Проблема с работой библиотеки libpthread.so (NPTL), !*! Аноним, 04:52 , 05-Июн-11 (2)
    > glibc-2.3.6+NPTL).
    > Проблема еще больше заводит меня в тупик, так как этот же самый
    > код работает отлично уже давно на другой платформе (компилятор arm-softfloat-linux-gnu,
    > glibc-2.3.6+linuxthreads).

    А уж как "заводит меня в тупик" что оно вообще работает при смене linuxthreads на NPTL

    • Проблема с работой библиотеки libpthread.so (NPTL), !*! Вова, 08:47 , 05-Июн-11 (3)
      >> glibc-2.3.6+NPTL).
      >> Проблема еще больше заводит меня в тупик, так как этот же самый
      >> код работает отлично уже давно на другой платформе (компилятор arm-softfloat-linux-gnu,
      >> glibc-2.3.6+linuxthreads).
      > А уж как "заводит меня в тупик" что оно вообще работает при
      > смене linuxthreads на NPTL

      АПИ не менялся, чему там перестать работать?

      • Проблема с работой библиотеки libpthread.so (NPTL), !*! Михаил, 13:05 , 07-Июн-11 (6)
        > АПИ не менялся, чему там перестать работать?

        Чей API?
        Возможные проблемы:
        В NPTL у всех потоков один PID а в linuxthreads PID уникален.
        Есть и другие ресурсы которые не являются общими linuxthreads, но общие в NPTL.
        Есть различия в реакции процесса/потока на сигналы.


        • Проблема с работой библиотеки libpthread.so (NPTL), !*! Sergio_anufriev, 14:04 , 07-Июн-11 (7)
          Думаю имеет в виду стандартный API для POSIX threads.
          Что касается моей проблемы, то ее позволила решить замена функции pthread_mutex_lock (во всей программе), на функцию

          int mutex_lock(pthread_mutex_t *lock)
          {
              
              struct timespec ts;
              while(1) {
                  clock_gettime(CLOCK_REALTIME, &ts);
                  ts.tv_nsec += 10000000;
                  if( pthread_mutex_timedlock(lock, &ts) == 0)
                      return 0;
              }
          }

          Плюс добавления небольших usleep в потоки для балансировки время работы потоков в программе.

          Просматривая код linuxthreads обнаружил там реализацию очереди для потов, трудно сказать для чего она там применяется, но может быть из-за этого эта библиотека работает гораздо лучше с потоками, в плане из поочередного запуска.


        • Проблема с работой библиотеки libpthread.so (NPTL), !*! Вова, 15:48 , 07-Июн-11 (8)
          >> АПИ не менялся, чему там перестать работать?
          > Чей API?
          > Возможные проблемы:
          > В NPTL у всех потоков один PID а в linuxthreads PID уникален.
          > Есть и другие ресурсы которые не являются общими linuxthreads, но общие в
          > NPTL.
          > Есть различия в реакции процесса/потока на сигналы.

          Помогу подытожить: 99%% приложений, работавших с linuxthreads будут работать с реализацией NPTL.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру