안녕하세요,
재재입니다.

이전 포스팅에서,
c++ mutable 을 사용하는 이유를 자세히 설명드렸었는데요.

이번 포스팅에서는,
간단한 예시를 통해 c++ mutable mutex 예제 코드를 보여드릴게요.

(1) 요구사항

  1. SimpleExample 이름의 class 를 추가하시오.
  2. 멤버변수인 example 을 갖게 하고, 외부에서 직접 수정 할 수 없도록 하시오.
  3. 멀티 스레딩 환경에서 동작 할 수 있게 하시오.
  4. 단, 외부에서 SimpleExample 에 접근 할 수 있는 method 는,
    GetValue 와 SetValue 고 이 method 를 통해서만 example 에 접근/수정가능.

(2) c++ mutable mutex 예제 코드

(1) 요구사항을 구현한 간단한 코드 예시입니다.

#include <mutex>
class SimpleExample {
public:
    void SetValue(int value) {
        std::lock_guard<std::mutex> lock(mutex_);
        this->example_ = value;
    }
    int GetValue() const {
        std::lock_guard<std::mutex> lock(mutex_);
        return this->example_;
    }
private:
    mutable std::mutex mutex_;
    int example_ = 0;
};

https://en.cppreference.com/w/cpp/thread/mutex

(3) 작성한 코드에 대한 분석

(2) 에서 작성한 코드에 대한 분석입니다.

  1. Setter method 인 SetValue 에서는 example 값을 변경 할 수 있도록 구현했는데,
    example 에 점유한 스레드가 있으면 기다려야하기 때문에,
    std::lock_guard 를 통해 점유 및 대기하도록 하였습니다.
  2. Getter method 인 GetValue 에서는 example 에 접근 할 수 있지만,
    수정 할 수 없기 때문에 const 를 사용했습니다.

1번 설명에서 사용한 std::lock_guard 에 대해 설명드리면,
최초 SetValue 를 호출한 스레드 (a)가 점유를 시작하게 되고,
그 이후 스레드는 std::lock_guard 를 만나면 대기하게 됩니다.
이후, 최초 스레드 (a)는 점유를 해제하며 다음 스레드가 점유 할 수 있도록 해줍니다.

(4) 결론

c++ mutable mutex 예제 코드를 살펴봤습니다.
이번 예제에서 c++ mutex lock_guard 를 같이 사용했었는데요.
lock_guard 외에도 lock 을 활용 할 수 있고,
std::mutex 외에도 shared_mutex 등이 있습니다.

앞으로 mutex 를 잘 활용해서 멀티 스레딩 환경에서 활용 할 수 있는,
좋은 예제를 만들어볼게요.

c++ mutable mutex 예제 코드
태그:                     

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다