ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [c++14] shared_mutex와 shared_lock의 사용
    프로그래밍/c++ 2015. 3. 24. 12:52
    반응형

    c++14에서 추가된 shared_mutex와 shared_lock_guard는 리더즈-라이터 락(Readers-Writer Lock)이다.(리더즈 라이터 락?)

    컨테이너에 데이터를 추가할 땐 일반적인 lock_guard를 사용하고, 컨테이너에 있는 데이터를 사용하기만 할 때에는 shared_lock_guard를 사용한다.


    사용 예를 보자


    컨테이너에 데이터를 추가할 때 일반적인 lock_guard를 사용하는 모습이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            void add_thread(thread* thrd)
            {
                if(thrd)
                {
                    boost::lock_guard<shared_mutex> guard(m);
                    threads.push_back(thrd);
                }
            }



    컨테이너를 순환하며 어떤 함수를 호출하는 과정에서는 shared_lock을 사용했다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            void join_all()
            {
                boost::shared_lock<shared_mutex> guard(m);
     
                for(std::list<thread*>::iterator it=threads.begin(),end=threads.end();
                    it!=end;
                    ++it)
                {
                  if ((*it)->joinable())
                    (*it)->join();
                }
            }



    단순히 데이터를 쿼리하는 함수에서도 shared_lock을 사용.

    1
    2
    3
    4
    5
            size_t size() const
            {
                boost::shared_lock<shared_mutex> guard(m);
                return threads.size();
            }



    지금 예제 코드에는 boost의 shared_lock을 사용하긴 했지만 c++14에는 표준 라이브러리에 추가되었다.

    (VS2013의 표준 라이브러리엔 shared_lock이 없다.)

    반응형
Designed by Tistory.