getchar_unlocked() – Faster Input in C/C++ For Competitive Programming - GeeksforGeeks

08 Feb, 2022
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++
C
// C++ program to demonstrate// working of getchar_unlocked()#include <iostream>using namespace std; int main(){    // Syntax is same as getchar()    char c = getchar_unlocked();     cout << "Entered character is " << c;     return 0;} // This code is contributed by SUBHAMSINGH10.
// C program to demonstrate// working of getchar_unlocked()#include <stdio.h>int main(){    // Syntax is same as getchar()    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 objectOne 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.
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++
C
// C++ program to demonstrate// working of putchar_unlocked()#include <iostream>using namespace std;int main(){    // Syntax is same as getchar()    char c = getchar_unlocked();     putchar_unlocked(c);     return 0;} //This code is contributed by Shubham Singh
// C program to demonstrate// working of putchar_unlocked()#include <stdio.h>int main(){    // Syntax is same as getchar()    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(). 
This article is contributed by Ayush Saluja. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
anshikajain26
SHUBHAMSINGH10
cpp-input-output
CPP-Library
C Language
C++
Competitive Programming
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
fork() in C
Command line arguments in C/C++
Substring in C++
Function Pointer in C
TCP Server-Client implementation in C
Vector in C++ STL
Initialize a vector in C++ (6 different ways)
Map in C++ Standard Template Library (STL)
Inheritance in C++
Constructors in C++