를 삽입 찾기 조작을 보호하고 키/값을 삽입해야하는 경우에만 고유 잠금으로 업그레이드하십시오. 여태까지는 그런대로 잘됐다?혼란 표준에 업그레이드 잠금을 사용하여 이상 : 그, 상대적으로 간단한 형태로 스레드 안전 게터 방법을 고려 /의 찾을지도
은 내가 상상하는 것은 (모든 단계에서 내 개념이 잘못되면 알려 주시기 바랍니다) 다음이다 :
두 스레드 모두가에 대한
repo.find()
을 실행할 수있는방법을 입력 같은 시간에 같은 키를 (그리고 키가 존재하지 않습니다).
두 가지 모두 실패합니다. 키가 존재하지 않습니다. 초 스레드가 업그레이드 된 지역을 입력 기다리는 동안
첫 스레드, 업그레이드 된 지역을 입력하여 단독 액세스를 얻을 수 있습니다.
첫 번째 스레드가 key에 대한 새 항목을 작성한 다음 이 해제됩니다.
초 스레드가 입력하고 는 첫 번째 스레드에 의해 삽입 된 키/값을 덮어 씁니다.
우리가 어떻게이 문제를 해결합니까 (사람이 원하는 것을하지 않은)? 감사합니다.
감사합니다. BTW는 두 번째 옵션처럼'lower_bound'와'find' 둘 다 로그 시간 복잡성을 가지고 있습니다. 그러면 그들은 같은 시간이 걸릴 것입니다. ? – rahman
@rahman'insert' 호출을 변경하는 것을 잊어 버렸습니다. 업데이트를 확인하십시오. iterator를 힌트로 취하고이 경우에는 O (1) amortized complexity가있다 (표준의 표 102 참조,'emplace_hint'를 보라). –