둘둘리둘둘리둘둘리둘둘리둘둘리둘

Thread 본문

Linux/Programming

Thread

dool2ly 2016. 7. 8. 22:40

@ 쓰레드 생성


pthread_create(3)

#include <pthread.h>


      int pthread_create(pthread_t *thread,                    //생성된 쓰레드의 buffer 포인터

const pthread_attr_t *attr,      //NULL이 아닐경우 쓰레드 속성

                                  void *(*start_routine) (void *),  //쓰레드로 생성할 함수 포인터

void *arg);                          //생성할 쓰레드의 인자


Compile and link with -pthread    //컴파일 시 -pthread 옵션 사용(gcc ./src.c -pthread)


 - 리턴값 : 성공 시 0, 실패 시 error number




@ 쓰레드 정리


pthread_join(3)

#include <pthread.h>


int pthread_join(pthread_t thread,    //기다릴 TID

void **retval);        //해당 쓰레드의 exit status


Compile and link with -pthread


 - 쓰레드가 종료될 때 까지 기다리고 쓰레드의 자원을 정리함으로 메모리 누수를 막음

 - 대상 쓰레드는 반드시 joinable 상태여야 함

 - 기다리는 동안 블록됨

 - 리턴값 : 성공 시 0, 실패 시 error number


예)


pthread_detach(3)

      #include <pthread.h>


       int pthread_detach(pthread_t thread);


Compile and link with -pthread


 - 쓰레드를 분리함

 - 종료될 때에 리소스들은 자동으로 해제된다(정리된다)

 - 이미 detach된 쓰레드에 detach를 시도하면 예측 불가능한 동작

 - 기다리지 않아도 되나 쓰레드의 종료시점을 알 수 없음 -> signal로 해결가능

 - 리턴값 : 성공 시 0, 실패 시 error number




@ 쓰레드 동기화 - 뮤텍스(Mutex)


 - 뮤텍스 생성 & 초기화


pthread_mutex_t mutex;


      int pthread_mutex_init(pthread_mutex_t *restrict mutex,

                                    const pthread_mutexattr_t *restrict attr);


      pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;



 - 뮤텍스 잠금 요청


      int pthread_mutex_lock(pthread_mutex_t *mutex);


int pthread_mutex_trylock(pthread_mutex_t *mutex);


pthread_mutex_trylock의 경우 pthread_mutex_lock와 동일하지만, 이미 잠긴 뮤텍스를 참조 하려할땐 즉각적으로 리턴 결과가 나옴(기다리지 않는다)


 - 뮤텍스 잠금 해제


       int pthread_mutex_unlock(pthread_mutex_t *mutex);


- 뮤텍스 제거


      int pthread_mutex_destroy(pthread_mutex_t *mutex);


예)


'Linux > Programming' 카테고리의 다른 글

파일 접근 권한(mode_t)  (0) 2017.01.08
IPC(Inter Process Communication)  (0) 2016.07.09
Signal  (0) 2016.07.05
유저 정보 획득  (0) 2016.07.03
파일 속성 획득  (0) 2016.07.03
Comments