getchar_unlocked() – Faster Input in C/C++ For Competitive Programming
getchar_unlocked() is similar to getchar() with the exception that it is not thread-safe. This function can be securely used in a multi-threaded program if and only if they are invoked when the invoking thread possesses the (FILE*) object, as is the situation after calling flockfile() or ftrylockfile().
Syntax:
int getchar_unlocked(void);
Example:
Input: g
C++
#include <iostream>
using namespace std;
int main()
{
char c = getchar_unlocked();
cout << "Entered character is " << c;
return 0;
}
|
C
#include <stdio.h>
int main()
{
char c = getchar_unlocked();
printf ( "Entered character is %c" , c);
return 0;
}
|
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 a 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 that 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.
Example:
Input: g
C++
#include <iostream>
using namespace std;
int main()
{
char c = getchar_unlocked();
putchar_unlocked(c);
return 0;
}
|
C
#include <stdio.h>
int main()
{
char c = getchar_unlocked();
putchar_unlocked(c);
return 0;
}
|
Output
g
As an exercise, the readers may try solutions given here with getchar_unlocked() and compare performance with getchar().
Last Updated :
08 Feb, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...