Является ли fprintf потокобезопасным? В руководстве по glibc вроде бы сказано, что это , но мое приложение, которое записывает в файл с помощью одного вызова fprintf(), похоже, смешивает частичные записи из разных процессов.
изменить: чтобы уточнить, рассматриваемая программа представляет собой плагин http://www.lighttpd.net/, а сервер работает с несколькими рабочими потоками. .
Глядя на файл, некоторые записи перемешаны.
редактировать 2: Кажется, проблема, которую я вижу, может быть связана с тем, что «рабочие потоки» lighttpd на самом деле являются отдельными процессами: http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor
Проблемы
Запустив 2 или более процессов в одном сокете, вы получите лучший параллелизм, но у вас будет несколько недостатков, о которых вы должны знать:
- mod_accesslog может создавать неработающие журналы доступа, так как один и тот же файл открывается дважды и НЕ синхронизируется.
- mod_status будет иметь n отдельных счетчиков, по одному для каждого процесса.
- mod_rrdtool потерпит неудачу, так как дважды получит одну и ту же метку времени.
- mod_uploadprogress не будет отображать правильный статус.
fprintf
, или вы наблюдаете это в потокахstdout
иstderr
? - person Craig S   schedule 27.02.2009