코드로 구현하려다보니 어떤 경우는 parameter를 NULL로, 어떤 경우는 주소값으로 전달하던데, 정확히 왜 그런것인지 잘모르겠어서 개념이해가 부족함을 느끼고 다시 공부하고 적는 정리용 포스팅입니당..
Initializes attr by default values
int pthread_attr_init(pthread_attr_t *attr);
attr
을 system에서 정의한 초기값으로 초기화한다.pthread_create()
함수의 스레드 속성으로 스레드를 생성할 때 사용된다. 하나의 스레드 속성 객체는 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_routine
을 arg
인자를 사용하여 실행한다. 만약 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;
}
}
✔️ waits for a thread th
int pthread_join(pthread_t thread, void **thread_return);
thread - 종료를 대기할 스레드
thread_return - NULL, 혹은 종료 값을 받을 주소
thread
가 종료될 때까지 대기한다. 대기하는 스레드가 종료되면, thread_return
인자의 값은 pthread_exit() 함수가 전달한 종료 값을 얻게 된다.pthread_join
으로 처리하지 않는다면 해당 스레드의 리소스가 반환되지 않는다. 남겨진 자원은 memory leak 현상이 발생하게 되므로, 스레드간의 동기 작업과 리소스 해제를 위해 반드시 사용해야 한다.✔️ terminates thread
void pthread_exit(void *retval);
retval
를 스레드 종료를 대기하고 있는 스레드에 전달한다. 교수님 수업 PPT 필기한 내용
각각의 parameter가 무엇을 뜻하는지 정확히 알 필요가 있었던 것 같다. 다음 시간에도 OS에 대한 내용으로 돌아오겠습니다! 👩🏻💻🍒