getchar_unlocked() – Entrada más rápida en C/C++ para programación competitiva

getchar_unlocked() es similar a getchar() con la excepción de que no es seguro para subprocesos. Esta función se puede usar de forma segura en un programa de subprocesos múltiples si y solo si se invocan cuando el subproceso que invoca posee el objeto (ARCHIVO*), como es la situación después de llamar a flockfile() o ftrylockfile().

Sintaxis:

int getchar_unlocked(void);

Ejemplo:

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;
}

Producción

Entered character is g 

Los siguientes son algunos puntos importantes: 

  1. Dado que no es seguro para subprocesos, se evitan todos los gastos generales de exclusión mutua y es más rápido que getchar().
  2. Puede ser especialmente útil para problemas de programación competitivos con «Advertencia: datos de E/S grandes, tenga cuidado con ciertos lenguajes (aunque la mayoría debería estar bien si el algoritmo está bien diseñado)».
  3. No hay problema con el uso de getchar_unlocked() incluso en un entorno de subprocesos múltiples, siempre que el subproceso que lo usa sea el único subproceso que accede al objeto de archivo
  4. Una diferencia más con getchar() es que no es una función de biblioteca estándar de C, sino una función POSIX. Puede que no funcione en compiladores basados ​​en Windows.
  5. Es un hecho conocido que scanf() es más rápido que cin y getchar() es más rápido que scanf() en general. getchar_unlocked() es más rápido que getchar(), por lo tanto, el más rápido de todos.
  6. Del mismo modo, hay getc_unlocked(), putc_unlocked() y putchar_unlocked(), que son versiones no seguras para subprocesos de getc(), putc() y putchar(), respectivamente.

Ejemplo:

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;
}

Producción

g

Como ejercicio, los lectores pueden probar las soluciones dadas aquí con getchar_unlocked() y comparar el rendimiento con getchar(). 

Este artículo es una contribución de Ayush Saluja . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *