mirror of
https://github.com/gabime/spdlog.git
synced 2025-09-28 17:19:34 +08:00
feat(mpmc_blocking_q): add blocking dequeue without timeout (#2588)
Use the new blocking dequeue to avoid unnecessarily waking up the thread pool every 10s. Fixes #2587 by replacing std::condition_variable::wait_for with std::condition_variable::wait as a workaroung for gcc 11.3 issue 101978. Co-authored-by: Alok Priyadarshi <alokp@dexterity.ai>
This commit is contained in:
@@ -43,6 +43,26 @@ TEST_CASE("dequeue-empty-wait", "[mpmc_blocking_q]")
|
||||
REQUIRE(delta_ms <= wait_ms + tolerance_wait);
|
||||
}
|
||||
|
||||
TEST_CASE("dequeue-full-nowait", "[mpmc_blocking_q]")
|
||||
{
|
||||
spdlog::details::mpmc_blocking_queue<int> q(1);
|
||||
q.enqueue(42);
|
||||
|
||||
int item = 0;
|
||||
q.dequeue_for(item, milliseconds::zero());
|
||||
REQUIRE(item == 42);
|
||||
}
|
||||
|
||||
TEST_CASE("dequeue-full-wait", "[mpmc_blocking_q]")
|
||||
{
|
||||
spdlog::details::mpmc_blocking_queue<int> q(1);
|
||||
q.enqueue(42);
|
||||
|
||||
int item = 0;
|
||||
q.dequeue(item);
|
||||
REQUIRE(item == 42);
|
||||
}
|
||||
|
||||
TEST_CASE("enqueue_nowait", "[mpmc_blocking_q]")
|
||||
{
|
||||
|
||||
@@ -95,12 +115,12 @@ TEST_CASE("full_queue", "[mpmc_blocking_q]")
|
||||
for (int i = 1; i < static_cast<int>(q_size); i++)
|
||||
{
|
||||
int item = -1;
|
||||
q.dequeue_for(item, milliseconds(0));
|
||||
q.dequeue(item);
|
||||
REQUIRE(item == i);
|
||||
}
|
||||
|
||||
// last item pushed has overridden the oldest.
|
||||
int item = -1;
|
||||
q.dequeue_for(item, milliseconds(0));
|
||||
q.dequeue(item);
|
||||
REQUIRE(item == 123456);
|
||||
}
|
||||
|
Reference in New Issue
Block a user