From ecbd77faf45d8ef03e710a0b9d0b664beed4e63c Mon Sep 17 00:00:00 2001 From: cosmicing Date: Mon, 31 Oct 2022 10:25:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B000-ProgramElement/1-NolockQue?= =?UTF-8?q?ue/examples/jamfile,=2000-ProgramElement/1-NolockQueue/examples?= =?UTF-8?q?/message=5Fq.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1-NolockQueue/examples/jamfile | 1 + .../1-NolockQueue/examples/message_q.cpp | 67 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 00-ProgramElement/1-NolockQueue/examples/jamfile create mode 100644 00-ProgramElement/1-NolockQueue/examples/message_q.cpp diff --git a/00-ProgramElement/1-NolockQueue/examples/jamfile b/00-ProgramElement/1-NolockQueue/examples/jamfile new file mode 100644 index 0000000..5c00173 --- /dev/null +++ b/00-ProgramElement/1-NolockQueue/examples/jamfile @@ -0,0 +1 @@ +exe messageq : message_q.cpp ; diff --git a/00-ProgramElement/1-NolockQueue/examples/message_q.cpp b/00-ProgramElement/1-NolockQueue/examples/message_q.cpp new file mode 100644 index 0000000..efb3f72 --- /dev/null +++ b/00-ProgramElement/1-NolockQueue/examples/message_q.cpp @@ -0,0 +1,67 @@ +#include "lock_free_queue.hpp" +#include +#include +#include + +using namespace std; + +struct Message { + int id; + int type; + string notify; +}; + +int main() +{ + add::LockFreeQueue q; + auto product_func = [&q]() { + int id = 0; + while (id < 100) { + Message e = { id, 0, "" }; + switch(id % 3) { + case 0: + e.type = 0; + e.notify = "message type 0"; + break; + case 1: + e.type = 1; + e.notify = "message type 1"; + break; + case 2: + e.type = 2; + e.notify = "message type 2"; + break; + } + if (!q.push(e)) { + std::this_thread::sleep_for(std::chrono::microseconds(1)); + continue; + } + id++; + } + }; + auto consume_func = [&q]() { + int i = 0; + while (i < 100) { + Message e; + if (!q.pop(e)) { + std::this_thread::sleep_for(std::chrono::microseconds(1)); + continue; + } + printf("message[%d]: type:%d, content:%s\n", e.id, e.type, e.notify.c_str()); + i++; + } + + }; + // 生产者 + std::thread p1(product_func); + std::thread p2(product_func); + // 消费者 + std::thread c1 (consume_func); + std::thread c2 (consume_func); + + p1.join(); + p2.join(); + c1.join(); + c2.join(); + return 0; +} -- GitLab