Я понимаю, что printf может маскировать условие гонки в коде. Однако я не понимаю, почему syslog не может его замаскировать. Люди говорят, что syslog похож на сборку релизов. У нас есть три варианта сборки: debug (серийная отладка + syslog включена), производство (syslog включено) и релиз (без последовательной отладки и без syslog). Говорят, попробуйте production-, чтобы включить syslog только для отладки проблемы. Я не мог понять, почему syslog не замаскирует состояние гонки. Может кто-нибудь объяснить?
Стандартные функции stdio, такие как printf, обеспечивают блокировку, чтобы быть потокобезопасной, поэтому многопоточный код, содержащий вызовы printf, может быть в некоторой степени сериализован. Это может изменить поведение кода с условиями гонки. (Вы можете посмотреть man-страницу для "unlocked_stdio" для неблокирующих версий некоторых функций stdio. В некоторых случаях использование одного или другого может сделать удивительно большие различия в производительности).
Я менее знаком с syslog. Насколько я знаю, некоторые версии syslog не делают никакой блокировки, не являются потокобезопасными и не вызывают такую же сериализацию, но реализация syslog Linux является потокобезопасной и должна вызывать аналогичные (но, вероятно, не совсем такая же) сериализация, как printf.
Поэтому, согласно моему пониманию, "люди" ошибаются.
printf
сериализует вещи, как вы ожидаете, аsyslog
нет? Без каких-либо дополнительных деталей (особенно примеров кода) ваш вопрос слишком расплывчатый.