The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Проблема с работой библиотеки libpthread.so (NPTL)"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Проблема с работой библиотеки libpthread.so (NPTL)"  +/
Сообщение от Sergio_anufriev email(ok) on 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.

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

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Проблема с работой библиотеки libpthread.so (NPTL)"  +/
Сообщение от Вова on 03-Июн-11, 16:46 
>[оверквотинг удален]
> захвата 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  будет работать с глибс версий от а до б,  и ну и глибс будет требовать версии ядра.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

5. "Проблема с работой библиотеки libpthread.so (NPTL)"  +/
Сообщение от Sergio_anufriev email(ok) on 06-Июн-11, 12:13 
Вова, если тебе не сложно, подскажи решение проблемы. Я воспользовался пакетом  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.

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

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

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

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


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

7. "Проблема с работой библиотеки libpthread.so (NPTL)"  +/
Сообщение от Sergio_anufriev email(ok) on 07-Июн-11, 14:04 
Думаю имеет в виду стандартный 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 обнаружил там реализацию очереди для потов, трудно сказать для чего она там применяется, но может быть из-за этого эта библиотека работает гораздо лучше с потоками, в плане из поочередного запуска.


Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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