Когда происходит блокировка файлового потока в glibc? - PullRequest
2 голосов
/ 01 февраля 2011

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

Спасибо!

1 Ответ

3 голосов
/ 01 февраля 2011

Блокировка, вызываемая getc, обеспечивает блокировку на уровне приложения объекта stdio FILE, чтобы обеспечить многопоточный доступ к одному и тому же объекту FILE несколькими потоками в одном приложении.Таким образом, нужно будет получать каждый раз, когда читается символ, а не только при пополнении буфера.

Но, если вы не обращаетесь к ФАЙЛУ из нескольких потоков,Вам никогда не придется ждать блокировки.Если накладные расходы на получение / снятие блокировки слишком велики (измерьте это; не просто предполагайте), у вас также есть возможность вручную блокировать / разблокировать, используя flockfile и funlockfile, а затем getc_unlocked. * 1009.*

...