diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-11-27 17:39:18 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-12-01 15:41:08 +0000 |
commit | e5a6ebae583b0c2e0f84a3b5446375b5c755aa6f (patch) | |
tree | 591c3591561b4305ba5b39192bc6b4ee9b7e23a6 /searchcore | |
parent | ab8072ce5f98b3f95914c58c815f21b41192e531 (diff) |
Just take a nap when Q is full.
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp | 8 | ||||
-rw-r--r-- | searchcore/src/apps/vespa-feed-bm/pending_tracker.h | 20 |
2 files changed, 8 insertions, 20 deletions
diff --git a/searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp b/searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp index 25a14db9267..de60ae88f65 100644 --- a/searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp +++ b/searchcore/src/apps/vespa-feed-bm/pending_tracker.cpp @@ -8,8 +8,6 @@ namespace feedbm { PendingTracker::PendingTracker(uint32_t limit) : _pending(0u), _limit(limit), - _mutex(), - _cond(), _bucket_info_queue() { } @@ -25,17 +23,13 @@ PendingTracker::drain() if (_bucket_info_queue) { _bucket_info_queue->get_bucket_info_loop(); } - std::unique_lock<std::mutex> guard(_mutex); while (_pending > 0) { - _cond.wait(guard); + std::this_thread::sleep_for(1ms); if (_bucket_info_queue) { - guard.unlock(); _bucket_info_queue->get_bucket_info_loop(); - guard.lock(); } } if (_bucket_info_queue) { - guard.unlock(); _bucket_info_queue->get_bucket_info_loop(); } } diff --git a/searchcore/src/apps/vespa-feed-bm/pending_tracker.h b/searchcore/src/apps/vespa-feed-bm/pending_tracker.h index 96b1a50141b..2a18b759a4b 100644 --- a/searchcore/src/apps/vespa-feed-bm/pending_tracker.h +++ b/searchcore/src/apps/vespa-feed-bm/pending_tracker.h @@ -2,11 +2,12 @@ #pragma once -#include <mutex> -#include <condition_variable> #include <atomic> #include <memory> +#include <thread> +#include <chrono> +using namespace std::chrono_literals; namespace storage::spi { struct PersistenceProvider; } namespace feedbm { @@ -18,10 +19,8 @@ class BucketInfoQueue; * benchmark feeding. */ class PendingTracker { - uint32_t _pending; + std::atomic<uint32_t> _pending; uint32_t _limit; - std::mutex _mutex; - std::condition_variable _cond; std::unique_ptr<BucketInfoQueue> _bucket_info_queue; public: @@ -29,18 +28,13 @@ public: ~PendingTracker(); void release() { - std::unique_lock<std::mutex> guard(_mutex); - --_pending; - if (_pending < _limit) { - _cond.notify_all(); - } + _pending--; } void retain() { - std::unique_lock<std::mutex> guard(_mutex); while (_pending >= _limit) { - _cond.wait(guard); + std::this_thread::sleep_for(1ms); } - ++_pending; + _pending++; } void drain(); |