[Philosophers] 허용 함수 목록 - 스레드

woonchoi·2022년 3월 1일
0

42Cursus

목록 보기
8/9
post-thumbnail

Philosopher 과제를 위해서는 C언어 스레드 함수들과, semaphore , mutex관련 함수들에 대한 학습이 어느정도 필요하다

스레드 관련 함수들은 다른 언어에서도 형태가 어느정도 비슷하기 때문에 확실하게 학습해 두는 것이 좋다.

pthread를 이용해 코드를 짜게 되면 컴파일 옵션으로 -Ipthread를 주어야 한다는 점을 잊지 말자.

pthread_create

의존성

#include <pthread.h>

함수 원형

int pthread_create(pthread_t *thread_id, const pthread_attr_t *attr,
					void *(*start_routine)(void *), void *arg);
  • 스레드를 생성하는 함수
  • *thread_id : pthread 식별자이다. thread가 제대로 생성되었다면 thread의 식별값이 저장된다.
  • *attr : pthread 속성(특성)이다. 기본적인 스레드 특성을 이용하고자 하면 NULL을 사용하면 된다.
    • attr
  Detach state        = PTHREAD_CREATE_JOINABLE
  Scope               = PTHREAD_SCOPE_SYSTEM
  Inherit scheduler   = PTHREAD_INHERIT_SCHED
  Scheduling policy   = SCHED_OTHER
  Scheduling priority = 0
  Guard size          = 4096 bytes
  Stack address       = 0x40196000
  Stack size          = 0x201000 bytes
  • *(*start_routine)(void *) : 스레드가 분기되었을 때 스레드에서 실행하는 함수이다. 스레드 함수의 매개변수는 pthread_create 함수의 네 번째 인자를 받는다.
  • *arg : *(*start_routine)(void *)의 매개변수로 넘겨지는 인자이다.
  • return
    • 성공 : 0
    • 실패 : set errno

해당 함수를 이용하여 스레드를 만들 수 있다. 스레드들은 프로세스 내의 데이터 영역을 공유하지만, 각각의 스레드끼리 독립적인 스택영역을 가지고, 각자의 PC(Program counter)를 가지므로 이를 유의하여 코드를 짜야한다.


테스트 코드

해당 코드는 메인 스레드의 i를 인자로 받은 스레드와 메인 스레드가 번갈아가며 각각의 문자열을 출력하는 코드이다.

실행 결과


pthread_join

의존성

#include <pthread.h>

함수 원형

int pthread_join(pthread_t *thread_id, void **value_ptr);
  • 스레드 종료를 대기하는 함수
  • *thread_id : pthread 식별자이다.
  • **value_ptr : 대기하던 스레드가 종료되면 대기하던 스레드의pthread_exit() 함수가 전달한 exit value를 받는다.
  • return
    • 성공 : 0
    • 실패 : set errno
profile
개발공부

0개의 댓글