Здравствуйте, 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 очевидно возвращает указатель на свой статический буфер.)
Иногда реентрантность дорго обходится по памяти и времени. А треды пользуют все же не часто. Поэтому и бывают две версии библиотек.