aboutsummaryrefslogtreecommitdiff
path: root/arch/x86_64/src/shared/mutex.cpp
diff options
context:
space:
mode:
authorFabian Imhof <fabian.imhof@ost.ch>2024-12-03 08:06:40 +0000
committerFabian Imhof <fabian.imhof@ost.ch>2024-12-03 08:06:40 +0000
commit4f7ea612982a9ee83023e43724ff53f8dce65fe0 (patch)
tree1d5a7abcb386061c51468f7d1dd3801c49e0247b /arch/x86_64/src/shared/mutex.cpp
parentb4962c8c7b94fce2e67a00671de87fa96fdbb659 (diff)
downloadteachos-4f7ea612982a9ee83023e43724ff53f8dce65fe0.tar.xz
teachos-4f7ea612982a9ee83023e43724ff53f8dce65fe0.zip
improve mutex file structure
Diffstat (limited to 'arch/x86_64/src/shared/mutex.cpp')
-rw-r--r--arch/x86_64/src/shared/mutex.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/x86_64/src/shared/mutex.cpp b/arch/x86_64/src/shared/mutex.cpp
new file mode 100644
index 0000000..65cd095
--- /dev/null
+++ b/arch/x86_64/src/shared/mutex.cpp
@@ -0,0 +1,27 @@
+#include "arch/shared/mutex.hpp"
+
+namespace teachos::arch::shared
+{
+ auto mutex::lock() -> void
+ {
+ while (true)
+ {
+ if (!locked.exchange(true, std::memory_order_acquire))
+ {
+ return;
+ }
+ }
+ }
+
+ /**
+ * @brief Try to lock the mutex (non-blocking)
+ *
+ * @return true if lock has been acquired and false otherwise
+ */
+ auto mutex::try_lock() -> bool { return !locked.exchange(true, std::memory_order_acquire); }
+
+ /**
+ * @brief Unlock the mutex
+ */
+ auto mutex::unlock() -> void { locked.store(false, std::memory_order_release); }
+} // namespace teachos::arch::shared \ No newline at end of file