The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проблема с pthread_cond_signal под FreeBSD"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Проблема с pthread_cond_signal под FreeBSD"
Сообщение от Aptimist emailИскать по авторуВ закладки(ok) on 07-Июл-04, 12:14  (MSK)
Суть проблемы в следующем. Есть программулина, которая обильно напичкана потоками и, как следствие, мьютексами и переменными условия. У программулины имеется две версии. Одна создаёт демона и свободно праит выполняя поставленную задачу, а вторая не демонизируется, но выполняет те же действия, при этом отчитываясь за каждый шаг в лог файле. Так вот, вторая версия работает нормально, а с первой вылез совершенно не подвластный моему разумению баг (или это фича?..). Прога спокойно создаёт демона и сворачивает удочки, а вот в демоне первый же вызов pthread_cond_signal вываливает программу в корку (?!)... Ну, не хочет сигналить и всё тут. Самое дебильное в этом то, что обе версии отлично работают под федорой (первой пока), а вот под фрёй только вторая, хотя код одинаков до последнего знака табуляции, просто в первой есть fork (и всё, что потом полагается), а во второй нет... Вчём дело? Помогите, плиз...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "Проблема с pthread_cond_signal под FreeBSD"
Сообщение от klalafuda emailИскать по авторуВ закладки on 07-Июл-04, 12:52  (MSK)
>Суть проблемы в следующем. Есть программулина, которая обильно напичкана потоками и, как
>следствие, мьютексами и переменными условия. У программулины имеется две версии. Одна
>создаёт демона и свободно праит выполняя поставленную задачу, а вторая не
>демонизируется, но выполняет те же действия, при этом отчитываясь за каждый
>шаг в лог файле. Так вот, вторая версия работает нормально, а
>с первой вылез совершенно не подвластный моему разумению баг (или это
>фича?..). Прога спокойно создаёт демона и сворачивает удочки, а вот в
>демоне первый же вызов pthread_cond_signal вываливает программу в корку (?!)... Ну,
>не хочет сигналить и всё тут. Самое дебильное в этом то,
>что обе версии отлично работают под федорой (первой пока), а вот
>под фрёй только вторая, хотя код одинаков до последнего знака табуляции,
>просто в первой есть fork (и всё, что потом полагается), а
>во второй нет... Вчём дело? Помогите, плиз...

pthread + fork всегда имели проблемы и достаточное количество unspecified behavior. смотрите в POSIX.

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Проблема с pthread_cond_signal под FreeBSD"
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 07-Июл-04, 20:26  (MSK)
>pthread + fork всегда имели проблемы и достаточное количество
>unspecified behavior. смотрите в POSIX.

Святые слова. IMHO, единственный безопасный вариант - сначала делать
все нужные fork()и, а уже затем баловаться с потоками. Единственно
когда точно не вылезет проблем с fork()ом pthread-овой программы -
это ежели сразу за fork()ом exec*() идёт :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Проблема с pthread_cond_signal под FreeBSD"
Сообщение от Aptimist emailИскать по авторуВ закладки(??) on 08-Июл-04, 10:13  (MSK)
>Святые слова. IMHO, единственный безопасный вариант - сначала делать
>все нужные fork()и, а уже затем баловаться с потоками. Единственно
>когда точно не вылезет проблем с fork()ом pthread-овой программы -
>это ежели сразу за fork()ом exec*() идёт :)

Это что ли демоном другую программу запускать... спасибо... попробую... если не прокатит моя новая версия (додумался, как без переменных условия (и, соответственно, без вызова pthread_cond_signal) обойтись. невдалей, конечно, но что делать... :-( )

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Проблема с pthread_cond_signal под FreeBSD"
Сообщение от klalafuda emailИскать по авторуВ закладки on 08-Июл-04, 10:38  (MSK)
>>Святые слова. IMHO, единственный безопасный вариант - сначала делать
>>все нужные fork()и, а уже затем баловаться с потоками. Единственно
>>когда точно не вылезет проблем с fork()ом pthread-овой программы -
>>это ежели сразу за fork()ом exec*() идёт :)
>
>Это что ли демоном другую программу запускать... спасибо... попробую... если не прокатит
>моя новая версия (додумался, как без переменных условия (и, соответственно, без
>вызова pthread_cond_signal) обойтись. невдалей, конечно, но что делать... :-( )

аналогичная проблема недавно обсуждалась в почтовых рассылках на NetBSD. userland pthread + fork(). симптомы аналогичны. вывод был простой - если вам актуальна надежность кода, не используйте потоки и процессы в одном приложении. понятно, что такое поведение implementation dependant. однако, даже в QNX6, где поддержка pthread таки на высоте, смешивание потоков и процессов может привести к самым забавным результатам.

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Проблема с pthread_cond_signal под FreeBSD"
Сообщение от Aptimist emailИскать по авторуВ закладки(??) on 08-Июл-04, 12:44  (MSK)
>аналогичная проблема недавно обсуждалась в почтовых рассылках на NetBSD. userland pthread +
>fork(). симптомы аналогичны. вывод был простой - если вам актуальна надежность
>кода, не используйте потоки и процессы в одном приложении. понятно, что
>такое поведение implementation dependant. однако, даже в QNX6, где поддержка pthread
>таки на высоте, смешивание потоков и процессов может привести к самым
>забавным результатам.
>
>// wbr

Спасибо за сочувствие... ;Ь
Как я понял из всего выше сказанного, нужно забыть про fork и просто, отключая программулину от всех потоков ввода-вывода, запускать программу с nohup...

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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