코드로 구현하려다보니 어떤 경우는 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에 대한 내용으로 돌아오겠습니다! 👩🏻💻🍒