프로그래밍/c++
[c++14] shared_mutex와 shared_lock의 사용
제페
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이 없다.)
반응형