The reentrant version of the getc macro is locked against multiple threads calling it simultaneously. This incurs overhead to ensure integrity of the stream. The unlocked version of this call, getc_unlocked can be used to avoid the overhead. The getc_ unlocked macro is functionally identical to the getc macro, except that it is not required to be implemented in a thread- safe manner. The getc_unlocked macro can be safely used only within a scope that is protected by the flockfile and funlockfile functions used as a pair. The caller must ensure that the stream is locked before getc_unlocked is used. Since getc_unlocked is a macro, a file pointer argument with side effects might be evaluated incorrectly. In such a case, use the fgetc_unlocked function instead. See also flockfile, ftrylockfile, and funlockfile.