정체불명의 모모

[c언어] Mutex , cond 기본정리 본문

프로그래밍(c++)

[c언어] Mutex , cond 기본정리

정체불명의 모모 2021. 9. 14. 15:28

회사 프로젝트의 멀티 쓰레드쪽 보다 모르는 부분이 있어

정리해 본다.

(난...멀티쓰레드는 한번도 해본적이 없어서... 개념은 알아도 구조 파악이 잘 되지 않는다.)


리눅스에서 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
    : 기본적인 사용법은 mutex와 비슷합니다.
      여기서 알아 두어야 할건 cond는 일종의 상태를 나타내는 함수로 잠을 자는 상태와 깨어져 있는 상태
      두가지 상태가 있다고 생각하시면 이해하기 편합니다.
    pthread_cond_wait(&구조체->cond변수, &구조체->mutex변수); // 쓰레드를 재움
    pthread_cond_signal(&구조체->cond변수); // 자고 있는 특정쓰레드에 signal을 보내 깨움
    pthread_cond_broadcast(&구조체->cond변수); // 자고 있는 모든 쓰레드를 깨움

참고 사이트 :

https://m.blog.naver.com/padamu1/221964110690

'프로그래밍(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