diff --git a/cpp/src/scheduler/task/SearchTask.cpp b/cpp/src/scheduler/task/SearchTask.cpp index 937936dd313d42895fd4c8942cd68302c5acd006..63aa4371e9a55dcb2842bc31c41f65462dba29d1 100644 --- a/cpp/src/scheduler/task/SearchTask.cpp +++ b/cpp/src/scheduler/task/SearchTask.cpp @@ -269,6 +269,7 @@ Status XSearchTask::MergeResult(SearchContext::Id2DistanceMap &distance_src, return Status::OK(); } + merge_mutex_.lock(); if (distance_target.empty()) { distance_target.swap(distance_src); return Status::OK(); @@ -328,6 +329,7 @@ Status XSearchTask::MergeResult(SearchContext::Id2DistanceMap &distance_src, } distance_target.swap(distance_merged); + merge_mutex_.unlock(); return Status::OK(); } diff --git a/cpp/src/scheduler/task/SearchTask.h b/cpp/src/scheduler/task/SearchTask.h index 2370e26361b5e4ac4fb11e71263fb5b2c9a705f5..6adda7c1fb118b3b6ac4a4ab7a0a78c2b869ed03 100644 --- a/cpp/src/scheduler/task/SearchTask.h +++ b/cpp/src/scheduler/task/SearchTask.h @@ -48,6 +48,8 @@ public: int index_type_ = 0; ExecutionEnginePtr index_engine_ = nullptr; bool metric_l2 = true; + + static std::mutex merge_mutex_; }; }