스레드 (Thread)

tycode·2021년 5월 9일
0

C.S (Computer Science)

목록 보기
20/40
post-custom-banner

Pthread

  • thread표준 API
    • POSIX 스레드(표준 규격) 또는 Pthread(피-스레드)라고 부름
  • Pthread API
    • 저수준 API로 100여개의 함수 제공
    • 복잡하지만, 유닉스 시스템 핵심 스레딩 라이브러리
    • 다른 스레딩 솔루션도 결국 Pthread를 기반으로 구현되어 있음

Pthread 라이브러리

  • <pthread.h> 헤더 파일에 정의되어 있음
  • 모든 함수는 pthread_ 로 시작
  • 크게 두가지 그룹
    1. 스레드 관리: 생성, 종료, 조인, 디태치 함수등
    2. 동기화: 뮤텍스등 동기화 관련 함수
      (전역변수 하나를 놓고 여러 스레드를 접근하여 쓰기 때문)
  • 기본 라이브러리(glibc)와 분리된 libpthread라이브러리에 pthread구현되어 있으므로 컴파일시 명시적으로 -pthread옵션 필요

스레드 생성

  • pthread_create
  • 예제)
    pthread_t라는 함수로 미리 선언이 되어 있어야 됨. (보통 스레드 갯수만큼 선언 해놓음)
    • 첫번째 인자는 해당 thread를 가리키는 포인터
    • 두번째는 스레드에 특정한 설정을 넣을 때 (대부분 기본 NULL)
    • 함수
    • 인자 넣어 줄 때 사용
    • ret값이 0이면 스레드 생성되었다는 것.

스레드 종료

스레드 조인

  • pthread_join
    해당 스레드가 종료하면 해당 스레드의 자원 없어지고 해당 스레드 종료상태값을 가지고 추가 처리도 할 수 있다.

  • 예제)
    p_thread식별자를 가진 스레드의 종료를 기다리고, status포인터로 종료값을 가져옴

스레드 디태치

  • pthread_detach
    해당 스레드가 종료될 경우, 즉시 관련 리소스(메모리 영역, 변수 등)를 해제(free)한다.
    • pthread_join를 기다리지 않고, 종료 즉시 리소스를 해제한다.

Pthread 뮤텍스 - 상호 배제 기법

  • 뮤텍스 선언과 초기화

  • 뮤텍스 락 걸기/풀기

  • 예제1 뮤텍스)

  • 예제2 뮤텍스X)
    임계 영역에 스레드 2개가 동시에 접근하면서 임계 자원 g_count를 막 써서 문제 일으킬 확률 있음.

  • 2개의 결과

post-custom-banner

0개의 댓글