ObjectMap이라는 std::map 타입의 객체가 있고 INT와 Object*를 쌍으로 관리합니다.
이 객체는 여러 스레드에서 추가하고 제거하고 조작하는데, ObjectMap에 동기화를 해 줘야겠지요.
ObjectMap에 담긴 Object*객체들을 사용할 때 INT키를 통해서 find하여 사용합니다.
그런데 find해서 사용하는 도중 다른 스레드가 ObjectMap에서 그 해당 객체를 제거해 버릴 수 있으니
find해서 객체를 사용하는 작업까지 ObjectMap을 동기화 시켜줍니다.
이렇게 되면 만약 ObjectMap에 Object* a, Object* b 두 포인터가 저장되어 있다고 할 때
a를 find해서 사용할 때 ObjectMap이 락이 걸려 있어 다른 스레드에서 b에 접근하기 위해서는 기다려야 합니다.
a와 b는 아무런 관계가 없는데도 말이죠..
객체를 추가/제거하는 작업보다 find하는 일이 빈번하게 있을 경우 이것은 너무 비효율적으로 작동하는것 같습니다.
다른 해결방법이 없나요?