[OS] POSIX Pthreads

Hα ყҽσɳɠ·2020년 4월 14일
0

Operating system

목록 보기
2/10

코드로 구현하려다보니 어떤 경우는 parameter를 NULL로, 어떤 경우는 주소값으로 전달하던데, 정확히 왜 그런것인지 잘모르겠어서 개념이해가 부족함을 느끼고 다시 공부하고 적는 정리용 포스팅입니당..


API functions


✔️ pthread_attr_init

Initializes attr by default values

int pthread_attr_init(pthread_attr_t *attr);
  • parameter: attr (스레드 속성 객체의 주소)
  • 이 함수는 스레드 속성 객체 attr을 system에서 정의한 초기값으로 초기화한다.
  • 초기화된 스레드 속성 객체는 pthread_create() 함수의 스레드 속성으로 스레드를 생성할 때 사용된다. 하나의 스레드 속성 객체는 pthread_create() 함수를 여러 번 호출할 때 사용할 수 있다.
  • return value: 성공적으로 수행되면 return 0, else error

✔️ pthread_create

creates thread

int pthread_create (pthread_t *thread, const pthread_attr_t *attr,
void * (*start_routine)(void *), void *arg);
  • parameter:

    thread - 생성된 스레드 ID가 저장될 주소
    attr - 스레드 속성
    start_routine - 스레드 시작 함수
    arg - 스레드 시작 함수의 인자

  • 새로운 스레드를 스레드 속성 attr에 따라 생성한다. 스레드 속성 객체 attr이 NULL이라면 기본 스레드 속성으로 스레드를 생성한다. 스레드가 성공적으로 생성되면 생성된 스레드 ID는 thread에 저장된다.

  • 생성된 스레드는 start_routinearg인자를 사용하여 실행한다. 만약 start_routine이 반환되면 내부적으로 pthread_exit() 함수가 호출되어 스레드가 종료된다.

  • return value: 성공적으로 수행되면 return 0, else error

  • example code

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

static void *start_routine(void *arg)
{

}

void exmaple(void)
{
    pthread_attr_t  attr;
    pthread_t       thread;
    int             error;

    /* initialize thread attribute object */
    error = pthread_attr_init(&attr);

    if (error != 0)
    {
        printf("thread attr init failed\n");
        return;
    }

    /* create a thread */
    error = pthread_create(&thread, &attr, start_routine, NULL);

    if (error != 0)
    {
        printf("thread creation failed\n");
        return;
    }
}

pthread_join

✔️ waits for a thread th

int pthread_join(pthread_t thread, void **thread_return);
  • parameter:

    thread - 종료를 대기할 스레드
    thread_return - NULL, 혹은 종료 값을 받을 주소

  • 이 함수는 호출한 스레드가 지정한 스레드 thread가 종료될 때까지 대기한다. 대기하는 스레드가 종료되면, thread_return 인자의 값은 pthread_exit() 함수가 전달한 종료 값을 얻게 된다.
  • 생성된 스레드를 pthread_join으로 처리하지 않는다면 해당 스레드의 리소스가 반환되지 않는다. 남겨진 자원은 memory leak 현상이 발생하게 되므로, 스레드간의 동기 작업과 리소스 해제를 위해 반드시 사용해야 한다.

pthread_exit

✔️ terminates thread

void pthread_exit(void *retval);
  • parameter: retval (스레드 종료 값)
  • 이 함수는 호출한 스레드를 종료시키고, retval를 스레드 종료를 대기하고 있는 스레드에 전달한다.

Example code

교수님 수업 PPT 필기한 내용


각각의 parameter가 무엇을 뜻하는지 정확히 알 필요가 있었던 것 같다. 다음 시간에도 OS에 대한 내용으로 돌아오겠습니다! 👩🏻‍💻🍒

profile
𝑯𝒐𝒏𝒆𝒔𝒕𝒚 𝑰𝒏𝒕𝒆𝒈𝒓𝒊𝒕𝒚 𝑬𝒙𝒄𝒆𝒍𝒍𝒆𝒏𝒄𝒆

0개의 댓글