Skip to content

Commit f29ac61

Browse files
committed
p1: use more efficient implementation of channel
Signed-off-by: Alex Chi <[email protected]>
1 parent 4e11ecd commit f29ac61

File tree

3 files changed

+14
-14
lines changed

3 files changed

+14
-14
lines changed

src/include/common/channel.h

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <mutex> // NOLINT
1717
#include <queue>
1818
#include <utility>
19+
#include "readerwriterqueue/readerwriterqueue.h"
1920

2021
namespace bustub {
2122

@@ -33,27 +34,18 @@ class Channel {
3334
*
3435
* @param element The element to be inserted.
3536
*/
36-
void Put(T element) {
37-
std::unique_lock<std::mutex> lk(m_);
38-
q_.push(std::move(element));
39-
lk.unlock();
40-
cv_.notify_all();
41-
}
37+
void Put(T element) { q_.enqueue(std::move(element)); }
4238

4339
/**
4440
* @brief Gets an element from the shared queue. If the queue is empty, blocks until an element is available.
4541
*/
4642
auto Get() -> T {
47-
std::unique_lock<std::mutex> lk(m_);
48-
cv_.wait(lk, [&]() { return !q_.empty(); });
49-
T element = std::move(q_.front());
50-
q_.pop();
51-
return element;
43+
T x;
44+
q_.wait_dequeue(x);
45+
return x;
5246
}
5347

5448
private:
55-
std::mutex m_;
56-
std::condition_variable cv_;
57-
std::queue<T> q_;
49+
moodycamel::BlockingReaderWriterQueue<T> q_;
5850
};
5951
} // namespace bustub

third_party/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ add_subdirectory(argparse)
1515
add_subdirectory(utf8proc)
1616

1717
add_subdirectory(backward-cpp)
18+
19+
add_subdirectory(readerwriterqueue)

third_party/versions.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,9 @@
6464
# tag: v2.7.0
6565
# commit hash: 8ca6144c85c165987cb1c5d8395c7314e13d4cd7
6666
# commit hash date: Dec 16 2021
67+
68+
# readerwriterqueue
69+
# url: https://github.com/cameron314/readerwriterqueue
70+
# branch: master
71+
# commit hash: 2dee33ae3edd1e454ac34fea0a27017613355eff
72+
# commit hash date: Mar 5 2023

0 commit comments

Comments
 (0)