Зачем отключать стандартный выходной буфер при многопоточности? - PullRequest
4 голосов
/ 19 ноября 2010

Я пытаюсь научиться многопоточности, и у меня есть простой вопрос.В большинстве примеров, которые я нахожу, стандартный выходной буфер отключается, прежде чем позволить нескольким потокам использовать его с:

setbuf (stdout, NULL);

Почему?Коды печатаются одинаково, если я уберу на них эту строку!

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

Возможно, что они не будут распечатывать то же самое - когда выходные данные буферизируются, они могут отображаться не сразу, что может изменить порядок вывода строк между потоками.

Отключение буферизации гарантирует, что вы знаете, в каком порядке выполнялись операторы.

2 голосов
/ 19 ноября 2010

Это предотвращает буферизацию, что означает, что вы лучше понимаете, что и когда делали разные потоки. Т.е. вы, скорее всего, увидите записи в stdout по мере их возникновения, а не после того, как некоторый объем данных был записан в stdout.

Это также полезно делать, когда вы передаете выходные данные консольного приложения в пользовательский интерфейс.

...