[OS] Thread APIs

G·2023년 4월 27일
0

OS

목록 보기
8/20
post-thumbnail
post-custom-banner

쓰레드를 위한 API와 Race condition을 알아보자.

APIs

pthread_create

#include <pthread.h>
typedef void (func)(void );

int pthread_create(pthread_t tid, pthread_attr_t attr,
func f, void arg);

  • 첫 번째 인자: main thread가 관리할 쓰레드의 id를 전달한다.
  • 두 번째 인자: Joinable, Detached 등 쓰레드의 조건을 선택한다. NULL을 전달하면 기본값으로 Joinable이다.
  • 세 번째 인자: 쓰레드로 처리할 함수이다.
  • 네 번째 인자: 처리할 함수의 인자이다.
  • 반환값: 쓰레드 생성을 성공하면 0, 아니면 nonzero이다.
  • tid에 쓰레드 ID가 저장된다.

pthread_self

#include <pthread.h> pthread_t pthread_self(void)

  • 반환값: 함수 caller의 thread id를 반환한다.

pthread_exit

#include <pthread.h>
void pthread_exit(void *thread_return);

쓰레드가 처리하는 함수가 종료되면 쓰레드도 암시적으로 종료된다.
위의 함수로 명시적으로 쓰레드를 종료할 수 있다.

pthread_join

pthread_join(pthread_t tid, void **thread_return)
wait()과 비슷하다. 쓰레드가 종료되었을 때, main thread가 status를 가져가며, 쓰레드에 할당된 자원이 모두 해제된다.

  • 첫 번째 인자: join할 thread의 id를 전달한다.
  • 두 번째 인자: thread의 종료 상태값이 전달된다.
  • 반환값: 성공하면 0, 에러발생시 nonzero


이 함수 또한 block되며, 쓰레드가 종료되어야 해제된다.
Joinable말고 Ditached 속성을 가진 쓰레드라면, join 필요없이 알아서 자원 할당을 해제한다.
둘 중 하나를 하지 않으면 메모리 누수가 발생한다.

profile
열심히 안 사는 사람
post-custom-banner

0개의 댓글