From 1ab711f81c1b181213d1f1ec97c966b8069ba8c3 Mon Sep 17 00:00:00 2001 From: Michael Mandl Date: Wed, 20 Mar 2024 13:33:47 +0100 Subject: [PATCH] feat: reduce mutex waits in parallel finder --- lib_vector_search/src/parallel_finder.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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));