-
[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를 사용하는 모습이다.
123456789void add_thread(thread* thrd){if(thrd){boost::lock_guard<shared_mutex> guard(m);threads.push_back(thrd);}}컨테이너를 순환하며 어떤 함수를 호출하는 과정에서는 shared_lock을 사용했다.
123456789101112void 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을 사용.
12345size_t size() const{boost::shared_lock<shared_mutex> guard(m);return threads.size();}지금 예제 코드에는 boost의 shared_lock을 사용하긴 했지만 c++14에는 표준 라이브러리에 추가되었다.
(VS2013의 표준 라이브러리엔 shared_lock이 없다.)
반응형'프로그래밍 > c++' 카테고리의 다른 글
배열의 최대 길이에 관하여 (0) 2015.03.31 우측값 참조로 받은 값은 우측값일까? (0) 2015.03.25 std::decay<T>의 사용 (0) 2015.03.04 [c++] 코드 스크랩 (0) 2015.02.24 std::copy(memcpy)와 std::move(memmove)의 차이 (0) 2015.02.20