aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/attribute/bitvector_search_cache.cpp
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-05-25 14:14:11 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-05-25 14:14:27 +0000
commit18a3749298480a2f188dce67adfd98d9a7621941 (patch)
tree0ac7358f5a0a39ed2d1c6a94bc252fa70068c800 /searchlib/src/vespa/searchlib/attribute/bitvector_search_cache.cpp
parentd180f4be67f0d0ea0e5dc474de4cd08b2dd71c54 (diff)
- Use a rwlock as reading surpasses writing by a very large factor.
- size() does not need a lock.
Diffstat (limited to 'searchlib/src/vespa/searchlib/attribute/bitvector_search_cache.cpp')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/bitvector_search_cache.cpp37
1 files changed, 19 insertions, 18 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/bitvector_search_cache.cpp b/searchlib/src/vespa/searchlib/attribute/bitvector_search_cache.cpp
index 4b8916273e7..70d34eef2ca 100644
--- a/searchlib/src/vespa/searchlib/attribute/bitvector_search_cache.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/bitvector_search_cache.cpp
@@ -3,44 +3,45 @@
#include "bitvector_search_cache.h"
#include <vespa/searchlib/common/bitvector.h>
#include <vespa/vespalib/stllike/hash_map.hpp>
+#include <mutex>
namespace search::attribute {
-using BitVectorSP = BitVectorSearchCache::BitVectorSP;
+BitVectorSearchCache::BitVectorSearchCache()
+ : _mutex(),
+ _size(0),
+ _cache()
+{}
-BitVectorSearchCache::BitVectorSearchCache() = default;
BitVectorSearchCache::~BitVectorSearchCache() = default;
void
-BitVectorSearchCache::insert(const vespalib::string &term, Entry::SP entry)
+BitVectorSearchCache::insert(const vespalib::string &term, std::shared_ptr<Entry> entry)
{
- LockGuard guard(_mutex);
+ std::unique_lock guard(_mutex);
_cache.insert(std::make_pair(term, std::move(entry)));
+ _size.store(_cache.size());
}
-BitVectorSearchCache::Entry::SP
+std::shared_ptr<BitVectorSearchCache::Entry>
BitVectorSearchCache::find(const vespalib::string &term) const
{
- LockGuard guard(_mutex);
- auto itr = _cache.find(term);
- if (itr != _cache.end()) {
- return itr->second;
+ if (size() > 0ul) {
+ std::shared_lock guard(_mutex);
+ auto itr = _cache.find(term);
+ if (itr != _cache.end()) {
+ return itr->second;
+ }
}
- return Entry::SP();
-}
-
-size_t
-BitVectorSearchCache::size() const
-{
- LockGuard guard(_mutex);
- return _cache.size();
+ return {};
}
void
BitVectorSearchCache::clear()
{
- LockGuard guard(_mutex);
+ std::unique_lock guard(_mutex);
_cache.clear();
+ _size.store(0ul, std::memory_order_relaxed);
}
}