Re[4]: Segmentation fault
От: Ekin  
Дата: 02.06.04 11:34
Оценка:
Здравствуйте, Ekin, Вы писали:

E>Здравствуйте, alexora, Вы писали:


A>>А по подробней можно узнать что за -D_REENTRANT

A>>Почему -pthread не катит ?

E>Опция -pthread должна катить, судя по докам. А что этот дефайн помог, а -pthread само по себе не помогло?


Дефайн _REENTRANT включат реентрантные версии функций и возможно структур. Правда, наверное, только при сборке библиотек, потому что я сейчас не нашел зацепок в хедерах.

Реентрантные функции, это те в которые можно зайти снова, когда другой вызов еще не вышел -- например при рекурсии или из другого треда. В частности, это значит, что эти функции не используют статичесие данные, если только они не константные или защищены мьютексом.
Бывает и вот такие смешные случаи нереентрантности в одном треде:
printf( "%s -> %s\n", inet_ntoa(ip_src), inet_ntoa(ip_dst));
напечатает всегда два раза адрес ip_dst, несмотря на намерение вложенное в этот принт программистом )
(потому что библиотечная функция inet_ntoa очевидно возвращает указатель на свой статический буфер.)
Иногда реентрантность дорго обходится по памяти и времени. А треды пользуют все же не часто. Поэтому и бывают две версии библиотек.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.