diff --git a/lib_vector_search/src/parallel_finder.cpp b/lib_vector_search/src/parallel_finder.cpp index 5bfbbaa..1ea4676 100644 --- a/lib_vector_search/src/parallel_finder.cpp +++ b/lib_vector_search/src/parallel_finder.cpp @@ -27,13 +27,17 @@ ParallelFinder::find_prefix(string_view search_term) const { [](const vector &word_list, const string_view &search_term, forward_list &result, size_t start_index, size_t end_index, mutex &result_mutex) { + forward_list thread_results; for (size_t index = start_index; index < end_index; ++index) { const auto ¤t_word = word_list[index]; if (current_word.starts_with(search_term)) { - const lock_guard lock(result_mutex); - result.push_front(¤t_word); + thread_results.push_front(¤t_word); } } + if (!thread_results.empty()) { + const lock_guard lock(result_mutex); + result.merge(thread_results); + } }, cref(word_list_), cref(search_term), ref(result), first_word_index, last_word_index, ref(result_mutex));