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

C 언어에서 스레드 속성의 스택 크기 가져오기 및 설정하기

C 언어에서 스레드 속성(pthread attribute)의 스택 크기를 확인하거나 변경하려면 POSIX 스레드(pthread) 라이브러리가 제공하는 pthread_attr_getstacksize() 함수와 pthread_attr_setstacksize() 함수를 사용합니다. 이 글에서는 두 함수의 사용법과 동작 방식을 예제 코드와 함께 살펴보겠습니다.

pthread_attr_getstacksize() – 현재 스택 크기 가져오기

이 함수는 스레드 속성 객체에 설정된 스택 크기를 조회하는 데 사용됩니다. 여기서 stacksize 속성은 해당 스레드의 스택에 할당되는 최소 스택 크기를 의미합니다. 함수가 성공적으로 실행되면 0을 반환하고, 실패하면 0이 아닌 오류 코드를 반환합니다.

함수 원형은 다음과 같으며, 두 개의 인자를 받습니다.

pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize)
  • attr : 값을 조회할 스레드 속성 객체입니다.
  • stacksize : 조회된 스택 크기(바이트 단위)를 저장할 변수입니다.

pthread_attr_setstacksize() – 새로운 스택 크기 설정하기

이 함수는 스레드 속성 객체에 새로운 스택 크기를 지정하는 데 사용됩니다. 설정된 stacksize 값은 이후 이 속성 객체로 생성되는 스레드에 적용됩니다. 마찬가지로 성공 시 0을 반환하고, 실패 시 오류 코드를 반환합니다.

함수 원형은 다음과 같으며, 역시 두 개의 인자를 받습니다.

pthread_attr_setstacksize(pthread_attr_t *attr, size_t *stacksize)
  • attr : 수정할 스레드 속성 객체입니다.
  • stacksize : 새로 설정할 스택 크기(바이트 단위)입니다.

참고로 설정 가능한 최소 스택 크기는 시스템 헤더에 정의된 PTHREAD_STACK_MIN 값보다 작을 수 없습니다.

알고리즘

시작
    스택 크기를 저장할 변수를 선언하고 pthread 속성 객체 a를 선언한다.
    pthread_attr_init()으로 속성 객체를 초기화한다.
    pthread_attr_getstacksize()로 현재 스택 크기를 가져와 출력한다.
    pthread_attr_setstacksize()로 새로운 스택 크기를 설정한 뒤,
    pthread_attr_getstacksize()로 다시 조회하여 출력한다.
종료

예제 코드

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int main() {
    size_t stacksize;
    pthread_attr_t a;

    // 속성 객체를 반드시 먼저 초기화해야 합니다.
    pthread_attr_init(&a);

    pthread_attr_getstacksize(&a, &stacksize);
    printf("Current stack size = %zu\n", stacksize);

    pthread_attr_setstacksize(&a, 67626);
    pthread_attr_getstacksize(&a, &stacksize);
    printf("New stack size = %zu\n", stacksize);

    return 0;
}

위 코드에서는 %d 대신 size_t 타입에 맞는 %zu 서식 지정자를 사용했으며, 초기화되지 않은 속성 객체를 사용할 때 발생할 수 있는 정의되지 않은 동작을 막기 위해 pthread_attr_init() 호출을 추가했습니다.

실행 결과

Current stack size = 8388608
New stack size = 67626

현재 스택 크기의 기본값은 운영체제와 시스템 설정에 따라 달라질 수 있습니다. 위 예제에서는 새로운 스택 크기가 67,626바이트로 성공적으로 설정된 것을 확인할 수 있습니다.