From 99e2e923d0c77b02f3fb4ff648ea916954868606 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Fri, 28 Feb 2025 23:13:39 +0800 Subject: chore(store): move everything to store. --- .../life/operating-system-challenge/3/main.cpp | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 store/works/life/operating-system-challenge/3/main.cpp (limited to 'store/works/life/operating-system-challenge/3/main.cpp') diff --git a/store/works/life/operating-system-challenge/3/main.cpp b/store/works/life/operating-system-challenge/3/main.cpp new file mode 100644 index 0000000..461c775 --- /dev/null +++ b/store/works/life/operating-system-challenge/3/main.cpp @@ -0,0 +1,68 @@ +#include +#include +#include + +int main() { + int turn = 1; + int count = 0; + std::mutex mutex; + + auto thread_proc1 = [&] { + while (true) { + { + std::lock_guard guard(mutex); + if (count >= 10) + break; + if (turn == 1) { + std::cout << "A" << std::endl; + turn = 2; + } + } + + std::this_thread::yield(); + } + }; + + auto thread_proc2 = [&] { + while (true) { + { + std::lock_guard guard(mutex); + if (count >= 10) + break; + if (turn == 2) { + std::cout << "B" << std::endl; + turn = 3; + } + } + + std::this_thread::yield(); + } + }; + + auto thread_proc3 = [&] { + while (true) { + { + std::lock_guard guard(mutex); + if (count >= 10) + break; + if (turn == 3) { + std::cout << "C" << std::endl; + turn = 1; + count++; + } + } + + std::this_thread::yield(); + } + }; + + std::thread thread1(thread_proc1); + std::thread thread2(thread_proc2); + std::thread thread3(thread_proc3); + + thread1.join(); + thread2.join(); + thread3.join(); + + return 0; +} -- cgit v1.2.3