둘둘리둘둘리둘둘리둘둘리둘둘리둘
Thread 본문
@ 쓰레드 생성
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);
- 쓰레드를 분리함
- 종료될 때에 리소스들은 자동으로 해제된다(정리된다)
- 이미 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 |