mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-26 06:18:32 +00:00
Rename Common::FifoQueue to Common::SPSCQueue
Since all queues are FIFO data structures, the name wasn't informative as to why you'd use it over a normal queue. I originally thought it had something to do with the hardware graphics FIFO. This renames it using the common acronym SPSC, which stands for single-producer single-consumer, and is most commonly used to talk about lock-free data structures, both of which this is.
This commit is contained in:
parent
4ee85a3e07
commit
b58f8d19ab
13 changed files with 35 additions and 35 deletions
71
Source/UnitTests/Common/SPSCQueueTest.cpp
Normal file
71
Source/UnitTests/Common/SPSCQueueTest.cpp
Normal file
|
@ -0,0 +1,71 @@
|
|||
// Copyright 2014 Dolphin Emulator Project
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <thread>
|
||||
|
||||
#include "Common/SPSCQueue.h"
|
||||
|
||||
TEST(SPSCQueue, Simple)
|
||||
{
|
||||
Common::SPSCQueue<u32> q;
|
||||
|
||||
EXPECT_EQ(0u, q.Size());
|
||||
EXPECT_TRUE(q.Empty());
|
||||
|
||||
q.Push(1);
|
||||
EXPECT_EQ(1u, q.Size());
|
||||
EXPECT_FALSE(q.Empty());
|
||||
|
||||
u32 v;
|
||||
q.Pop(v);
|
||||
EXPECT_EQ(1u, v);
|
||||
EXPECT_EQ(0u, q.Size());
|
||||
EXPECT_TRUE(q.Empty());
|
||||
|
||||
// Test the FIFO order.
|
||||
for (u32 i = 0; i < 1000; ++i)
|
||||
q.Push(i);
|
||||
EXPECT_EQ(1000u, q.Size());
|
||||
for (u32 i = 0; i < 1000; ++i)
|
||||
{
|
||||
u32 v2;
|
||||
q.Pop(v2);
|
||||
EXPECT_EQ(i, v2);
|
||||
}
|
||||
EXPECT_TRUE(q.Empty());
|
||||
|
||||
for (u32 i = 0; i < 1000; ++i)
|
||||
q.Push(i);
|
||||
EXPECT_FALSE(q.Empty());
|
||||
q.Clear();
|
||||
EXPECT_TRUE(q.Empty());
|
||||
}
|
||||
|
||||
TEST(SPSCQueue, MultiThreaded)
|
||||
{
|
||||
Common::SPSCQueue<u32> q;
|
||||
|
||||
auto inserter = [&q]() {
|
||||
for (u32 i = 0; i < 100000; ++i)
|
||||
q.Push(i);
|
||||
};
|
||||
|
||||
auto popper = [&q]() {
|
||||
for (u32 i = 0; i < 100000; ++i)
|
||||
{
|
||||
while (q.Empty())
|
||||
;
|
||||
u32 v;
|
||||
q.Pop(v);
|
||||
EXPECT_EQ(i, v);
|
||||
}
|
||||
};
|
||||
|
||||
std::thread popper_thread(popper);
|
||||
std::thread inserter_thread(inserter);
|
||||
|
||||
popper_thread.join();
|
||||
inserter_thread.join();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue