Thread
개요
쓰레드란?
쓰레드간 메모리 공유
관련 함수들
Thread 생성 함수: pthread_create()
자신의 tid를 알려주는 함수 pthread_self()
자신의 Thread를 종료하는 함수: pthread_exit()
다른 Thread 종료시키는 함수: pthread_cancle()
다른 Thread 의 종료를 기다리고 reap하는 함수: pthread_join()
Thread에 signale을 보내는 함수: pthread_kill()
Thread 종류 (joinable)
•
Joinable thread (default)
◦
다른 쓰레드가 reap할 수 있고, 다른 쓰레드에 의해 reap 될 수 있다.
◦
다른 쓰레드가 reap하기 전까지는 메모리가 해제되지 않는다.
•
detached thread
◦
다른 쓰레드가 reap이나 종료할 수 없다.
◦
쓰레드 종료시 자동적으로 메모리가 해제된다.
◦
int pthread_detach(pthread_t thread) 로 detach할 수 있다.
Thread Synchronization - Mutex
개요
•
쓰레드간에 전역변수를 공유하기 때문에 전역변수에 동시에 접근할 경우 충돌이 발생할 수 있다.
•
Critical section
◦
공유되는 메모리에 접근하는 코드를 명칭
◦
같은 메모리를 두고 경합하는 critical section은 반드시 여러 쓰레드에서 동시에 실행되지 않게 해야 한다.
•
Mutual exclusion
◦
Critical section에 대한 독점권을 부여하는 것
◦
어떤 쓰레드가 critical section에 진입했을 때, 동일한 자원에 대한 critical section에 다른 쓰레드의 접근을 막아주는 것
•
Mutex
◦
쓰레드 동기화를 구현하는 것을 뜻한다.
Mutex 변수
Mutex 생성과 초기화
•
static 생성
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
C
복사
◦
생성할 경우 PTHREAD_MUTEX_INITIALIZER값으로 초기화된다.
▪
반드시 위의 값으로 초기화 해주어야 한다.
•
dynamic 초기화
int pthread_mutex_init(
pthread_mutex_t *mutex // mu
pthread_mutexattr_t *attr)
C
복사
◦
코드 실행중 어디서든 원하는 값으로 mutex를 초기화 할 수 있게 해주는 함수
◦
return: 성공시 0, 실패시 error code
Mutex destory
int pthread_mutex_destroy(
pthread_mutex_t *mutex) //제거할 뮤텍스의 포인터
C
복사
•
mutex의 주소에 담긴 mutex 변수를 삭제한다.
•
return: 성공시 0 실패시 error code
Mutex lock
int pthread_mutex_lock(
pthread_mutex_t *mutex)
C
복사
•
mutex 변수의 상태를 확인하고 unlock 상태라면 lock 으로 바꾸어주고,
이미 lock 상태라면 unlock 상태가 될 때 까지 쓰레드가 sleep을 한다.
•
return: 성공시 0 실패시 error code
int pthread_mutex_trylock(
pthread_mutex_t *mutex)
C
복사
•
mutex_lock과 같으나 이미 mutex 가 lock 상태라면 sleep에 들어가지 않고 다음 으로 계속 진행한다.
Mutex unlock
int pthread_mutex_unlock(
pthread_mutex_t *mutex)
C
복사
•
mutex 변수를 lock 상태에서 unlock 상태로 변경해주는 함수이다.
•
return: 성공시 0 실패시 error code
•
여러 쓰레드가 한 mutex를 두고 sleep 중일때 우르르 깨우고 경합을 시키게 되어 이때 누가 차지하는가를 두고 문제가 발생하기도 한다.