Open In App

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

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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++ 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




// 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: 

  1. Since it is not thread-safe, all overheads of mutual exclusion are avoided and it is faster than getchar().
  2. 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)”.
  3. 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
  4. 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.
  5. 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.
  6. 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++ 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




// 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(). 



Last Updated : 08 Feb, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads