Почему printf может маскировать состояние гонки, а syslog — нет?

Я понимаю, что printf может маскировать состояние гонки в коде. Однако я не понимаю, почему системный журнал не может это замаскировать. Люди говорят, что системный журнал похож на сборку релиза. У нас есть три варианта сборки: отладка (последовательная отладка + системный журнал включен), производственная (системный журнал включен) и сборка выпуска (последовательная отладка и системный журнал не включены). Люди говорят, попробуйте производство — то есть включить системный журнал только для устранения проблемы. Я не мог понять, почему системный журнал не будет маскировать состояние гонки. Может кто-нибудь объяснить, пожалуйста?

0

Решение

Стандартные функции stdio, такие как printf, выполняют блокировку для обеспечения безопасности потоков, поэтому многопоточный код, содержащий вызовы printf, может быть в некоторой степени сериализован. Это может изменить поведение кода в зависимости от условий гонки. (Вы можете посмотреть на странице справочника «unlocked_stdio» для неблокирующих версий некоторых функций stdio. Использование одной или другой может привести к неожиданно большим различиям в производительности в некоторых случаях.)

Я менее знаком с системным журналом. Насколько я знаю, немного версии syslog не блокируют, не поддерживают потоки и не вызывают такой же сериализации, как реализация syslog в Linux является Потокобезопасен и должен вызывать аналогичную (но, вероятно, не совсем такую ​​же) сериализацию, как printf.

Поэтому, насколько я понимаю, «люди» не правы.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]