diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-04-27 14:47:47 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-04-27 14:47:47 +0200 |
commit | 04b3a33ba6d9abb7ff7225f940fbe00b8a78a781 (patch) | |
tree | 427091c79613fa689b4571a1b280866855764dfa /searchlib | |
parent | ecec4e1caa9ef5565cbd625c0d2fa4238c541481 (diff) |
Use atomic _numDocs counter in search::memoryindex::MemoryIndex.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/memoryindex/memory_index.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/searchlib/src/vespa/searchlib/memoryindex/memory_index.h b/searchlib/src/vespa/searchlib/memoryindex/memory_index.h index dc1b5d8060d..4296ba5bd1a 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/memory_index.h +++ b/searchlib/src/vespa/searchlib/memoryindex/memory_index.h @@ -8,6 +8,7 @@ #include <vespa/searchlib/queryeval/searchable.h> #include <vespa/vespalib/stllike/hash_set.h> #include <vespa/vespalib/util/memoryusage.h> +#include <atomic> namespace search::index { class IFieldLengthInspector; @@ -52,7 +53,7 @@ private: std::unique_ptr<DocumentInverterCollection> _inverters; bool _frozen; uint32_t _maxDocId; - uint32_t _numDocs; + std::atomic<uint32_t> _numDocs; mutable std::mutex _lock; std::vector<bool> _hiddenFields; index::Schema::SP _prunedSchema; @@ -70,11 +71,13 @@ private: } } void incNumDocs() { - ++_numDocs; + auto num_docs = _numDocs.load(std::memory_order_relaxed); + _numDocs.store(num_docs + 1, std::memory_order_relaxed); } void decNumDocs() { - if (_numDocs > 0) { - --_numDocs; + auto num_docs = _numDocs.load(std::memory_order_relaxed); + if (num_docs > 0) { + _numDocs.store(num_docs - 1, std::memory_order_relaxed); } } @@ -154,7 +157,7 @@ public: } virtual uint32_t getNumDocs() const { - return _numDocs; + return _numDocs.load(std::memory_order_relaxed); } virtual uint64_t getNumWords() const; |