From dc1f0c4c0096013799416664894c5194dc7e1f52 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. --- .../MutexAvoidDataRaceDemo.cpp | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 store/works/life/operating-system-experiment/MutexAvoidDataRaceDemo.cpp (limited to 'store/works/life/operating-system-experiment/MutexAvoidDataRaceDemo.cpp') diff --git a/store/works/life/operating-system-experiment/MutexAvoidDataRaceDemo.cpp b/store/works/life/operating-system-experiment/MutexAvoidDataRaceDemo.cpp new file mode 100644 index 0000000..81a7aa1 --- /dev/null +++ b/store/works/life/operating-system-experiment/MutexAvoidDataRaceDemo.cpp @@ -0,0 +1,42 @@ +#include "Mutex.h" +#include "Thread.h" + +#include + +int main() { + + unsigned data = 0; + cru::Mutex mutex; + mutex.Lock(); + + cru::Thread t1([&data, &mutex] { + for (int i = 0; i < 100000; i++) { + mutex.Lock(); + data += 10; + //std::cout << "Data is now: " << data << '\n'; + mutex.Unlock(); + } + }); + + cru::Thread t2([&data, &mutex] { + for (int i = 0; i < 100000; i++) { + mutex.Lock(); + data += 10; + //std::cout << "Data is now: " << data << '\n'; + mutex.Unlock(); + } + }); + + std::cout << "Created thread: " << t1.GetNativeID() << '\n'; + std::cout << "Created thread: " << t2.GetNativeID() << '\n'; + + mutex.Unlock(); + + t1.Join(); + t2.Join(); + + std::cout << "Answer is " << data << ", which is " + << (data == 2000000 ? "correct" : "false") << '\n'; + + return 0; +} -- cgit v1.2.3