diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-05-25 14:14:11 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-05-25 14:14:27 +0000 |
commit | 18a3749298480a2f188dce67adfd98d9a7621941 (patch) | |
tree | 0ac7358f5a0a39ed2d1c6a94bc252fa70068c800 /searchlib/src/vespa/searchlib/attribute/bitvector_search_cache.cpp | |
parent | d180f4be67f0d0ea0e5dc474de4cd08b2dd71c54 (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.cpp | 37 |
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); } } |