정체불명의 모모
[c언어] Mutex , cond 기본정리 본문
회사 프로젝트의 멀티 쓰레드쪽 보다 모르는 부분이 있어
정리해 본다.
(난...멀티쓰레드는 한번도 해본적이 없어서... 개념은 알아도 구조 파악이 잘 되지 않는다.)
리눅스에서 c 언어를 통해 멀티쓰레드를 구현할 때 pthread를 이용하여 구현하게 됩니다. <- 우리 프로젝트가 그럼
이러한 pthread를 이용한 멀티쓰레드는 같은 메모리를 활용하는 쓰레드가 있다면 서로 정해진 순서없이 운영체제에서
요청하는데로 메모리에 접근하게 됩니다.
크게 문제가 없는 경우도 있지만 계산, 메모리에 변경 후 출력 등과 같은 작업을 하게 될때에는 이러한 방식의 쓰레드 활용은 오류가 나타납니다.
이럴때 해주어야 하는 것이 Mutex 와 Cond 구문입니다.
Mutex
- 개념 : Mutex는 pthread에서 각각의 스레드가 동일한 메모리에 접근하여 발생하는 오류를 줄이기 위한 구문입니다.
Mutex는 기본적으로 메모리에 접근할 스레드를 제한하는 형태로 이루어 집니다. - 기본 구문 :
pthread_mutex_t 변수이름;
구조체 안에서 사용하며 변수 이름만 적어주면 선언은 완료 됩니다.
pthread_mutex_init(&구조체->변수이름, NULL);
쓰레드가 여러개 일때 mutex 구문에 대한 정보를 서로 공유해야 하기 때문에 main문에 주로 작성됩니다.
pthread_mutex_lock(&구조체->변수이름);
pthread_mutex_unlock(&구조체->변수이름); - 예시
pthread_mutex_t lock; pthread_mutex_init(&share->lock , NULL); // 구조체를 main에서 share로 선언했다고 가장 pthread_mutex_lock(&so->lock); // 구조체를 쓰레드 내에서 so로 선언했다고 가정 pthread_mutex_unlock(&so->lock);
Cond
- 개념 : Cond는 mutex를 도와주기 위한 쓰레드의 상태를 설정할 수 있는 구문입니다.
- 기본 구문 :
pthread_cond_t pthread_cond_init
여기서 알아 두어야 할건 cond는 일종의 상태를 나타내는 함수로 잠을 자는 상태와 깨어져 있는 상태
두가지 상태가 있다고 생각하시면 이해하기 편합니다.
pthread_cond_wait(&구조체->cond변수, &구조체->mutex변수); // 쓰레드를 재움 pthread_cond_signal(&구조체->cond변수); // 자고 있는 특정쓰레드에 signal을 보내 깨움 pthread_cond_broadcast(&구조체->cond변수); // 자고 있는 모든 쓰레드를 깨움
참고 사이트 :
'프로그래밍(c++)' 카테고리의 다른 글
[c++] reinterpret_cast (0) | 2021.09.15 |
---|---|
[c++ / 리눅스] Condition Variable (0) | 2021.09.15 |
[c++]static_cast 란? (0) | 2021.09.08 |
[이론] 업캐스팅과 다운캐스팅이란??(필요성, 예제) (0) | 2021.09.08 |
[c++] dynamic_cast 란? (2) | 2021.09.08 |
Comments