본문 바로가기
멀티코어 프로그래밍/Pthread

Pthread Attributes(2)

by 기리의 개발로그 2022. 5. 18.

스레드의 종류

  • 두 종류의 스레드

    • Joinable vs Detached

Joinable 스레드

  • pthread_create 시 생성되는 스레드의 기본 성질

  • 스레드 종료 시 pthread_join을 통해 다른 스레드에서 자원을 반환해줘야 함

  • 스레드의 종료 시점을 다른 스레드에서 알 필요가 있을 때

  • 스레드의 함수 반환값을 다른 스레드에서 사용할 필요가 있을 때


Detaced 스레드

  • 스레드 종료 시 자신의 자원을 스스로 반환

  • 다른 스레드와 독립적인 작업을 수행하는 스레드를 사용할 때


Detached 스레드의 구현

  • thread_attribute를 사용하는 방법

  • pthread_detach를 사용하는 방법


Attribute를 사용한 detached 스레드

  • pthread_attr_init(pthread_attr_t *attr)

    • attr 변수를 초기화
  • pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)

    • Detach 여부를 결정
    • PTHREAD_CREATE_JOINABLE
      • PTHREAD_CREATE_DETACHED
  • pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate)

    • detached 스레드인지 여부를 확인 가능
    • 확인한 상태를 int *detachstate에 저장

Pthread_detach

  • int pthread_detach(pthread_t thread)

    • 아규먼트로 넘겨준 thread의 상태를 detached 상태로 만듦
    • 메인 스레드뿐 아니라 호출된 스레드 스스로도 자신의 상태를 detached로 변환할 수 있음
  • pthread_self()

    • 자기 자신의 thread id를 반환

User mode / Kernel mode

  • 생성되는 스레드의 모드를 설정

  • PTHREAD_SCOPE_SYSTEM

    • User mode
      • 각각의 스레드가 시스템 자원을 배정받음
      • 프로세스 내부의 스레드들이 커널 스케줄러를 통해 스케줄 됨
      • 리눅스 상에선 이 모드만 제공
  • PTHREAD_SCOPE_PROCESS

    • Kernel mode
      • 프로세스에 배정된 자원을 프로세스 내의 스레드가 나눠가짐
  • pthread_attr_setscope(pthread_attr_t *attr, int scope)

    • 해당 attribute에 scope를 설정
    • PTHREAD_SOCPE_PROCESS
    • PTHREAD_SCOPE_SYSTEM
  • pthread_attr_getscope(pthread_attr_t *attr, int *scope)

    • 해당 attribute에서 scope를 얻어냄
    • int *scope에 저장

스레드 스택 크기 설정

  • 프로세스당 최대 스택 크기는 제한되어 있음
    • 리눅스 환경의 경우 10MB
  • 리눅스 pthread로 생성된 스레드의 최대 스택 크기는 프로세스와 같음
    • 작은 메모리를 필요로 하는 스레드를 많이 생성할 경우 메모리 낭비가 생길 수 있다.
    • 스레드 생성 시 최대 스택 크기를 바꿀 수 있음
  • pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize)
    • 생성될 스레드의 스택 크기 설정(byte)
  • pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize)
    • 생성될 스레드의 스택 크기를 얻어냄
반응형

'멀티코어 프로그래밍 > Pthread' 카테고리의 다른 글

Pthread Attributes(1)  (8) 2022.05.17
Pthread 동기화(1)  (7) 2022.05.15
Pthread를 이용한 병렬화  (13) 2022.05.13
Pthread Affinity  (13) 2022.05.12
Pthread 프로그래밍(3)  (5) 2022.05.11

댓글