aboutsummaryrefslogtreecommitdiff
path: root/arch
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
parentb4962c8c7b94fce2e67a00671de87fa96fdbb659 (diff)
downloadteachos-4f7ea612982a9ee83023e43724ff53f8dce65fe0.tar.xz
teachos-4f7ea612982a9ee83023e43724ff53f8dce65fe0.zip
improve mutex file structure
Diffstat (limited to 'arch')
-rw-r--r--arch/x86_64/CMakeLists.txt1
-rw-r--r--arch/x86_64/include/arch/shared/mutex.hpp15
-rw-r--r--arch/x86_64/src/shared/mutex.cpp27
3 files changed, 31 insertions, 12 deletions
diff --git a/arch/x86_64/CMakeLists.txt b/arch/x86_64/CMakeLists.txt
index 4a02e15..c5624d8 100644
--- a/arch/x86_64/CMakeLists.txt
+++ b/arch/x86_64/CMakeLists.txt
@@ -59,6 +59,7 @@ target_sources("_memory" PRIVATE
"src/memory/heap/bump_allocator.cpp"
"src/memory/heap/memory_block.cpp"
"src/memory/heap/linked_list_allocator.cpp"
+ "src/shared/mutex.cpp"
)
#[============================================================================[
diff --git a/arch/x86_64/include/arch/shared/mutex.hpp b/arch/x86_64/include/arch/shared/mutex.hpp
index d874dd8..36a4623 100644
--- a/arch/x86_64/include/arch/shared/mutex.hpp
+++ b/arch/x86_64/include/arch/shared/mutex.hpp
@@ -16,28 +16,19 @@ namespace teachos::arch::shared
/**
* @brief Lock the mutex (blocks if not available)
*/
- void lock()
- {
- while (true)
- {
- if (!locked.exchange(true, std::memory_order_acquire))
- {
- return;
- }
- }
- }
+ auto lock() -> void;
/**
* @brief Try to lock the mutex (non-blocking)
*
* @return true if lock has been acquired and false otherwise
*/
- bool try_lock() { return !locked.exchange(true, std::memory_order_acquire); }
+ auto try_lock() -> bool;
/**
* @brief Unlock the mutex
*/
- void unlock() { locked.store(false, std::memory_order_release); }
+ auto unlock() -> void;
private:
std::atomic<bool> locked{false};
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