-
pthread_mutex_init (뮤텍스 사용하기!)C_C++ 프로그래밍 2019. 5. 25. 01:59
개발 환경
OS
Ubuntu 18.04.2
컴파일러
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)
int pthread_mutex_init(pthread_mutex_t * mutex,const pthread_mutex_attr *attr);
mutex 객체를 초기화 시킨다.
attr은 특성인데, 기본적인 뮤텍스를 원한다면 NULL로 설정하면 된다.critical section = 임계 구역 (하나의 쓰레드만 접근이 가능)pthread_mutex_t
구조체
pthread_mutex_lock();lock을 걸어 임계 구역을 시작한다.
pthread_mutex_unlock();lock을 풀어 임계 구역을 해제한다.
소스코드
123456789101112131415161718192021222324252627282930313233343536373839404142#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>// init mutex containerpthread_mutex_t mutex_lock;// share resourceint share = 0;void *thread_function(void *data){int i;char *thread_name = (char *) data;// lockpthread_mutex_lock(&mutex_lock);// critical section startshare = 0;for(i = 0; i < 3; i++){printf("%s Count : %d\n", thread_name, share);share++;sleep(2);}// critical section end// mutex unlockpthread_mutex_unlock(&mutex_lock);}int main(){pthread_t p_thread1, p_thread2;int status;// mutex container initpthread_mutex_init(&mutex_lock, NULL);pthread_create(&p_thread1, NULL, thread_function, (void *) "THREAD 1");pthread_create(&p_thread2, NULL, thread_function, (void *) "THREAD 2");pthread_join(p_thread1, (void *)&status);pthread_join(p_thread2, (void *)&status);return 0;}cs 실행결과
mutex가 없는 경우
123456THREAD 1 Count : 0THREAD 2 Count : 0THREAD 1 Count : 2THREAD 2 Count : 3THREAD 2 Count : 4THREAD 1 Count : 4cs mutex를 사용한 경우
1234567THREAD 1 Count : 0THREAD 1 Count : 1THREAD 1 Count : 2THREAD 2 Count : 0THREAD 2 Count : 1THREAD 2 Count : 2cs ※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
반응형'C_C++ 프로그래밍' 카테고리의 다른 글
fseek와 lseek 사용 정리 +ftell (0) 2019.06.06 sscanf와 sprintf에 대해서 알아보자 (0) 2019.06.04 pthread_attr 사용 (pthread_detach 없이 자원 반납하기) (0) 2019.05.25 pthread_cleanup_pop, pthread_cleanup_push (0) 2019.05.25