Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C 언어 getchar_unlocked() 함수 완벽 정리 – 특징, 문법, 사용 예제

getchar_unlocked()는 C 언어의 표준 입력 함수인 getchar()에서 스트림 잠금(stream lock) 검사를 제거한 버전입니다. 이러한 특성 덕분에 실행 속도가 더 빠르다는 장점이 있지만, 동시에 스레드 안전성(thread safety)이 보장되지 않는다는 치명적인 단점을 가지고 있습니다.

getchar_unlocked()는 왜 위험할까?

Windows 환경에서는 getchar_unlocked()가 더 이상 권장되지 않으며(deprecated), 사용이 중단된 상태입니다. 그 이유는 다음과 같습니다.

  • 스레드 비안전(Thread Unsafe): 여러 스레드가 동시에 이 함수를 호출하면 데이터 경합(race condition)이 발생할 수 있습니다.
  • 스트림 잠금 검사 없음: 일반 getchar()는 호출 시 내부적으로 스트림을 잠가 다른 스레드의 접근을 막지만, getchar_unlocked()는 이 과정이 생략됩니다.

따라서 멀티스레드 환경에서는 절대 사용하지 말아야 하며, 단일 스레드 프로그램에서 성능이 중요한 경우(예: 경쟁 프로그래밍)에만 신중하게 사용하는 것이 좋습니다.

문법(Syntax)

C 언어에서 getchar_unlocked() 함수의 기본 문법은 다음과 같습니다.

int getchar_unlocked(void);
  • 매개변수: 없음(void)
  • 반환값: 표준 입력(stdin)으로부터 읽어 들인 문자를 int 형태로 반환하며, 파일 끝(EOF) 또는 오류 발생 시 EOF를 반환합니다.

사용 예제

다음은 C 언어에서 getchar_unlocked()를 사용하는 간단한 예제 코드입니다.

#include <stdio.h>

int main() {
    char val;
    val = getchar_unlocked();
    printf("Enter the character : \n");
    printf("Entered character : %c", val);
    return 0;
}

실행 결과

위 프로그램을 실행하고 문자 'a'를 입력하면 다음과 같은 출력 결과를 확인할 수 있습니다.

Enter the character : a
Entered character : a

정리

getchar_unlocked()는 잠금 검사를 생략하여 getchar()보다 빠른 입출력 성능을 제공하지만, 스레드 안전성이 없기 때문에 Windows에서는 지원이 중단되었습니다. 실무 개발에서는 안전한 getchar()fgetc() 사용을 권장하며, 속도가 결정적인 경쟁 프로그래밍 상황에서만 getchar_unlocked() 활용을 고려하는 것이 바람직합니다.