예제 코드.std :: unique_ptr의 STL 컨테이너에서 find()의 스레드 안전성
class Obj
{
public:
void doSome(void)
{
std::cout << "Hello World!" << std::endl;
}
};
std::unordered_map<int, std::unique_ptr<Obj>> map;
// insert -- done with single thread and before find()
map[123] = std::move(std::unique_ptr<Obj>(new Obj));
// find -- run from multiple threads
auto search = map.find(123); // <=== (Q)
if (search != map.end())
{
search->second->doSome();
}
(Q)
어떻게 스레드 추구한다에 대한 //을 실행하는 여러 스레드가 map.find (123)와 섹션을 찾을 수있는 경우?
는 map.find (123) 항상 모든 스레드에서 OBJ을 찾을 것인가? 검색 -> 보조이 다른 사람에게 할당되지 않은 한?
참고 : 함수에서 반환 한 값 (변수 이름이없는 것)은 이동하지 마십시오. 그것은 쓸모가 없다. –
일반적인 규칙은 non-const 함수도 동시에 호출되지 않는 한 표준 라이브러리 클래스의'const' 멤버 함수 (예 : find')를 호출하는 것이 좋습니다. –