getchar_unlocked() is similar to getchar() with the exception that it is not thread safe. Below is an example code.
Input: g Output: Entered character is g
Following are some important points:
- Since it is not thread safe, all overheads of mutual exclusion are avoided and it is faster than getchar().
- Can be especially useful for competitive programming problems with “Warning: Large I/O data, be careful with certain languages (though most should be OK if the algorithm is well designed)”.
- There is no issue with using getchar_unlocked() even in multithreaded environment as long as the thread using it is the only thread accessing file object
- One more difference with getchar() is, it is not a C standard library function, but a POSIX function. It may not work on Windows based compilers.
- It is a known fact than scanf() is faster than cin and getchar() is faster than scanf() in general. getchar_unlocked() is faster than getchar(), hence fastest of all.
- Similarly, there are getc_unlocked() putc_unlocked(), and putchar_unlocked() which are non-thread-safe versions of getc(), putc() and putchar() respectively.
// A simple C program to demonstrate
// working of putchar_unlocked()
// Syntax is same as getchar()
c = getchar_unlocked();
Input: g Output: g
As an exercise, the readers may try solutions given here with getchar_unlocked() and compare performance with getchar().