From 95bd9a67f9f6c90f627784e3f8fbf5c203784e51 Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期五, 30 四月 2021 15:36:17 +0800
Subject: [PATCH] change shm socket msg queue to atomic queue.

---
 src/shm_queue.h |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/shm_queue.h b/src/shm_queue.h
index 7e4ec31..5d5c0e9 100644
--- a/src/shm_queue.h
+++ b/src/shm_queue.h
@@ -53,8 +53,32 @@
 	bool TryWrite(const D &d) { return queue_.push_back(d); }
 
 private:
-	typedef Circular<D> Queue;
-	Queue queue_;
+	Circular<D> queue_;
+};
+
+template <int Power = 4>
+class SharedQ63
+{
+public:
+	typedef int64_t Data;
+	bool Read(Data &d, const int timeout_ms)
+	{
+		using namespace std::chrono;
+		auto end_time = steady_clock::now() + milliseconds(timeout_ms);
+		do {
+			if (TryRead(d)) {
+				return true;
+			} else {
+				robust::QuickSleep();
+			}
+		} while (steady_clock::now() < end_time);
+		return false;
+	}
+	bool TryRead(Data &d, const bool try_more = true) { return queue_.pop_front(d, try_more); }
+	bool TryWrite(const Data d, const bool try_more = true) { return queue_.push_back(d, try_more); }
+
+private:
+	robust::AtomicQueue<Power, Data> queue_;
 };
 
 } // namespace bhome_shm

--
Gitblit v1.8.0