1
스레드 저장이 아닌 데이터 구조가 있습니다. 다중 스레드는 두 가지 방법으로 해당 데이터 구조를 읽고 쓰고 있습니다. 아래 그림과 같이이 문제에 대한 나의 접근 방식은 unique_lock를 사용했다 (호출의 순서가 아니라 랜덤) :C++에서 여러 메서드에 걸쳐 잠금
struct test {
void func1() {
boost::unique_lock<boost::mutex> lock(_mutex);
// modify data-structure
}
void func2() {
boost::unique_lock<boost::mutex> lock(_mutex);
// modify data-structure
}
boost::mutex _mutex;
}
I하지만,이 코드를 한 번에 하나의 스레드가 데이터에 액세스 할 수 있는지, 뮤텍스는 두 메서드에서 공유되므로
그러나 어떻게 든 데이터 구조에서 버그가 발생하여 단일 스레드 테스트 케이스에서 재현 할 수없는 버그가 발생할 수 있습니다 ...
두 방법 모두에서 boost :: unique_lock을 사용해야합니까? 그런 다음
lock()
unlock()
으로 전화하십시오.
대신 ['boost :: scoped_lock'] (http://www.boost.org/doc/libs/1_61_0/doc/html/boost/interprocess/scoped_lock.html)을 사용하십시오. –
이 경우에는'std :: mutex'와'std :: lock_guard'를 사용할 수도 있습니다. STL에있는 것을 위해 부스트를 사용할 필요가 없습니다 – alexeykuzmin0
@JoachimPileborg이 경우 왜 다른 점이 있습니까? 'scoped_lock'은'unique_lock'에 의해 교체 가능해야합니다. – Jens