현생/TCP 소켓 프로그래밍
18-4 쓰레드 동기화 - 뮤텍스 [C][LINUX]
푸더기
2022. 2. 16. 23:48
반응형
뮤텍스란 Nutual Exclusion의 줄임말로, 쓰레드의 동시접근을 허용하지 않는다는 의미가 있습니다. 특정 영역을 접근할 때 자물쇠를 채우고, 나갈 때 자물쇠를 푸는 방식으로 활용됩니다.
#include<pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
//success:0 fail:0 이외의 값
위 두 함수는 각각 뮤텍스 자물쇠 시스템 생성 및 소멸 함수입니다.
mutex 인자에는 뮤텍스의 참조 값 저장을 위한 변수의 주소 값을 전달하고, 뮤텍스 소멸시에는 소멸하고자 하는 뮤텍스의 참조 값을 저장하고 있는 변수의 주소 값을 전달합니다. attr에는 생성하는 뮤텍스의 특성정보를 담고 있는 변수의 주소 값을 전달하고, 특성을 지정하지 않을 땐 NULL을 전달합니다.
따라서 뮤텍스의 생성을 위해서는 pthread_mutex_t 자료형의 변수를 선언해야 합니다.
#include<pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread mutex_t *mutex);
//success:0 fail:0 이외의 값
만약 자물쇠가 잠겨있는 상황(같은 mutex에 대하여 pthread_mutex_lock이 호출되고 unlock이 호출되지 않은 상황)이라면 pthread_mutex_lock은 반환되지 않습니다.
pthread_mutex_lock(&mutex);
...
pthread_mutex_unlock(&mutex);
위와 같이 임계영역을 감싸는 방식으로 사용됩니다. 만약 unlock 함수를 호출하지 않는다면 임계영역으로 진입할 수 없게 되는데 이를 Dead-lock이라 합니다.
반응형