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