시스템 프로그래밍-스레드 다루기

YuWan·2024년 7월 1일

linux

목록 보기
12/26

스레드

  • 프로세스를 구성하는 실행 흐름의 단위
  • 각기 다른 스레드 ID, 프로그램 카운터, 레지스터, 스택

세 개의 별도 프로세스 vs 스레드 세 개

  • 메모리: 여러 프로세스로 병행 실행 - 멀티 프로세스
  • 메모리: 여러 스레드로 병행 실행 - 프로세스 같은 영역 실행 3개
  • 가장 주된 차이점은 자원 공유 여부
    • 프로세스 간에는 기본적으로 자원을 공유하지 않음
    • 스레드 간에는 프로세스의 자원을 공유

프로세스 간에도 자원 공유 가능하다

  • 프로세스간 통신(IPC: Inter-Process Communication)
    • 공유 메모리를 통한 통신
    • 파이프를 통한 통신
    • 네트워크 소켓을 통한 통신

스레드 생성

int pthread_create(Pthread_t *thread, const pthead_attr_t *attr, void *(*start_routine) (void *), void *arg);
  • Parameter
    • thread:스레드 ID가 저장될 곳
    • attr:스레드 속성(NULL일 경우 기본 속성으로 초기화)
    • start_routine:스레드가 실행할 대상
    • arg:스레드 실행시 사용할 인자
  • Pthread_attr_t 구조체
    • pthread_attr_init()-스레드 속성 초기화
    • pthread_attr_destroy()-스레드 속성 폐기 스택크기, 스케줄링 인자, 최초 detach 상태 등 대부분 NULL로 지정
  • Return
    • 성공시 0, 실패시 errorno

스레드 조인:스레드 실행이 종료될 때까지 대기(스레드 종료 처리)

int pthread_join(pthread_t thread, void **retval);
  • Parameter
    • thread:기다릴 스레드 ID
    • retval:스레드의 종료 상태(exit status) 저장
  • Return
    • 성공시 0, 실패시 errorno

스레드 떼어내기:종료 시 자동으로 자원 해제

int pthread_detach(pthread_t thread);
  • Parameter
    • thread:떼어낼 스레드 ID
  • Return
    • 성공시 0, 실패시 errono
  • detach된 스레드는 말 그대로 떨어져있는 실행 단위 실행이 끝난 시간 or 보장이 필요하다.

스레드 종료

void pthread_exit(void *retval);
  • Parameter
    • retval:스레드의 종료 상태(exit status) 저장
  • Return
    • 없음
profile
공부 블로그

0개의 댓글