동적 뮤텍스
System Program/mutex 2013. 7. 4. 09:491. 동적 뮤텍스
실행 중에 뮤텍스를 할당하여 사용하고자 하는 응용에 적합한 방식이다.
또한 PTHREAD_MUTEX_INITIALIZER 초기값 이외값은 정적 초기값으로 사용될 수 없고
동적 뮤텍스를 통해서만 가능한다.
2. 동적 뮤텍스 초기화
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
성공하면 '0'을 리턴하고, 에러가 발생하면 에러번호 (양수)를 리턴한다.
3. 동적 뮤텍스 제거
동적으로 할당된 뮤텍스가 더 이상 필요하지 않으면 제거해야 한다. 아래 함수를 통해서 제거할 수 있다.
int pthread_mutex_destroy(pthread_mutex_t *mutex);
성공하면 '0'을 리턴하고, 에러가 발생하면 에러번호 (양수)를 리턴한다.
4. 뮤텍스 속성
위의 뮤텍스 초기화부분에 필요한 attr 설정 부분에 대한 자세한 설명은 생략하고 예제 코드로 대체한다.
NULL로 설정되면 기본 속성값으로 뮤텍스가 초기화된다.
pthread_mutex_t mtx; pthread_mutexattr_t mtxAttr; int retval, type; retval = pthread_mutexattr_init(&mtxAttr); if(retval != 0) { perror("pthread_mutexattr_init : "); exit(EXIT_FAILURE); } retval = pthread_mutexattr_settype(&mtxAttr, PTHREAD_MUTEX_ERRORCHECK); if(retval != 0) { perror("pthread_mutexattr_settype : "); exit(EXIT_FAILURE); } retval = pthread_mutex_init(&mtx, &mtxAttr); if(retval != 0) { perror("pthread_mutex_init : "); exit(EXIT_FAILURE); } retval = pthread_mutexattr_destroy(&mtxAttr); if(retval != 0) { perror("pthread_mutexattr_destroy : "); exit(EXIT_FAILURE); }
뮤텍스 속성도 초기화 함수와 기타 설정함수, 마지막으로 제거함수로 구성되어 있다.
여기서는 단지 뮤텍스 종류에 대해서만 살펴보고 자세한 내용은 메뉴얼 참조.
종류 |
설명 |
PTHREAD_MUTEX_NORMAL |
셀프 데드락 감지 기능이 없어서 이미 잠겨 있는 뮤텍스를 잠그려고 하면 뮤텍스는 데드락된다. |
PTHREAD_MUTEX_ERRORCHECK |
모든 동작에서 에러 검사를 수행한다. 디버그용으로 적합하다. |
PTHREAD_MUTEX_RECURSIVE |
잠금 카운터 개념이 추가되어 뮤텍스 잠금이 계속될 때 카운터가 증가한다. |
'System Program > mutex' 카테고리의 다른 글
조건변수 (0) | 2014.03.10 |
---|---|
정적 뮤텍스 (0) | 2014.03.10 |