Вызывает ли fwrite какую-либо внутреннюю блокировку? - PullRequest
1 голос
/ 10 сентября 2010

В солярисе, когда я подключил dbx к одному из работающих стеков, я обнаружил вызов fwrite, ведущий к __lll_lock_wait ()?

В каком сценарии это произойдет?Внутренне ли fwrite пытается получить блокировку?

1 Ответ

2 голосов
/ 10 сентября 2010

стандарты, которые я просматривал (C99 и POSIX), ничего не говорят о заблокированном или разблокированном вводе-выводе в отношении fwrite.

В моей системе linux не очень точное упоминание блокировки на странице man:

   For non-locking counterparts, see unlocked_stdio(3).

и эффективно, есть fwrite_unlocked функция. Стандартные разблокированные функции в POSIX: getc_unlocked(), getchar_unlocked(), putc_unlocked() и putchar_unlocked().

Моя интерпретация заключается в том, что, вероятно, все буферизованные операции ввода-вывода в наборе man (3) заблокированы и что у вас очень мало стандартизированных интерфейсов для выполнения разблокированного ввода-вывода.

То, что эти вещи блокируют потоки, - это действительно хорошо, так как в противном случае вы могли бы получить беспорядочный вывод, когда несколько потоков пишут в stderr, например,

...