[Philosophers] 주요 함수 정리

sham·2021년 7월 15일
0

gettimeofday

  • 1970년 1월 1일 자정 이후로 누적된 시간을 출력.

프로토 타입

int gettimeofday(struct timeval tv, struct timezone tz);

인자

tv : 현재 시간을 저장

struct timeval
{
	time_t      tv_sec; // 초
	suseconds_t tv_usec; // 마이크로초
}
  • tzp : timezone 구조체는 잘 안 쓰이고 보통 NULL이 들어감

반환

  • 성공 시 0
  • 실패 시 -1 리턴
    • tv나 tz가 접근 불가 영역을 가리키고 있을 때 실패

pthread_create

  • 쓰레드 생성함수.

프로토 타입

int pthread_create(pthread_t thread, const pthread_attr_t attr, void (start_routine)(void), void arg)

인자

  • thread - 쓰레드가 성공적으로 생성되었을 때 생성되는 쓰레드 식별자.
    • 이 인자로 넘어온 값을 통해서 pthread_join과 같은 함수를 사용할 수 있다.
  • attr - 스레드의 특성을 정의. 기본적으로 NULL을 지정.
    • 만약 스레드의 속성을 지정하려고 한다면 pthread_attr_init등의 함수로 초기화해야 한다. 과제에서는 쓸 일 없을 듯.
  • start_routine - 분기시키며 실행할 쓰레드 함수.
    • 생성된 쓰레드가 실행할 함수. 뒤에 올 arg를 인자로 받는다.
  • arg - start_routine에 전달될 매개변수.
    • start_routine에서 이 인자를 변환하여 사용.

반환

  • 성공 시 0
  • 에러 시 0이 아닌 값

쓰레드는 만들어지는 즉시 start_routine 함수를 시행하고, main 함수도 그대로 같이 실행한다. 쓰레드를 물줄기라고 생각했을 때, main 쓰레드 물줄기에서 또 하나의 물줄기가 갈라져 나와서 흐르는 것과 같다.

pthread_join

특정 쓰레드가 종료하기를 기다렸다가 해당 쓰레드가 종료된 후 다음 코드를 진행

프로토타입

int pthread_join(pthread_t thread, void **thread_return)

인자

  • thread - 기다릴 쓰레드의 식별자
    • pthread_create의 인자인 thread 스레드가 join하게 해준다.
  • thread_return - 쓰레드의 리턴값. NULL이 아닌 포인터를 넣어줄 경우 쓰레드의 리턴 값을 가져올 수 있다.
    • pthread_create에서 start_routine이 반환하는 반환값을 여기에 저장.

반환

  • 성공 시 0
  • 에러 시 0이 아닌 값

pthread_detach

  • 쓰레드 분리 함수
  • 쓰레드 식별자를 넣어주면 해당 쓰레드를 메인 쓰레드에서 분리 시켜줌;
  • 위 함수에 들어간 쓰레드는 종료되는 즉시 모든 자원을 free하는 것이 보증됨.
  • detach를 하지 않는다면 쓰레드가 종료되어도 pthread_join을 호출하지 않는 한 자원을 돌려주지 않음

pthread_join은 해당 쓰레드가 끝날 때까지 다른 쓰레드는 멈추지만 pthread_detach은 다른 쓰레드가 실행하는 함수가 실행될 수 있다.

join은 쓰레드가 끝나기 전까지는 메인 함수가 진행하지 않지만, detach는 진행한다!

프로토타입

int pthread_detach(pthread_t thread)

인자

  • thread - 분리 시킬 쓰레드 식별자

반환

  • 성공 시 0
  • 에러 시 0이 아닌 값

pthread_mutex_init

mutex를 사용하기 앞서 초기화를 위해 실행해야 하는 함수.

프로토타입

int pthread_mutex_init(pthread_mutex_t mutex, const pthread_mutexattr_t attr);

인자

  • *mutex - 초기화 할 mutex 객체
  • pthread_mutexattr_t * attr - mutex의 특성을 맞추기 위해 설정함.
    • 기본적으로 NULL.
    • 종류로 fast, recurisev, error checking이 있는데 디폴트 값은 fast.

반환

  • 성공시 0
  • 에러 시 0이 아닌 값

pthread_mutex_lock & pthread_mutex_unlock

각각 함수에 사용 시 해당 함수에 다른 쓰레드의 접근을 차단 / 차단 해제 해줄 수 있는 함수.

프로토타입

int pthread_mutex_lock(pthread_mutex_t mutex);
int pthread_mutex_unlock(pthread_mutex_t
mutex);

인자

  • mutex - 잠그거나 해제해 줄 mutex.

반환

  • 성공시 0
  • 에러 시 0이 아닌 값
profile
씨앗 개발자

0개의 댓글