diff options
| author | Fabian Imhof <fabian.imhof@ost.ch> | 2024-12-03 08:06:40 +0000 |
|---|---|---|
| committer | Fabian Imhof <fabian.imhof@ost.ch> | 2024-12-03 08:06:40 +0000 |
| commit | 4f7ea612982a9ee83023e43724ff53f8dce65fe0 (patch) | |
| tree | 1d5a7abcb386061c51468f7d1dd3801c49e0247b /arch | |
| parent | b4962c8c7b94fce2e67a00671de87fa96fdbb659 (diff) | |
| download | teachos-4f7ea612982a9ee83023e43724ff53f8dce65fe0.tar.xz teachos-4f7ea612982a9ee83023e43724ff53f8dce65fe0.zip | |
improve mutex file structure
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/x86_64/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | arch/x86_64/include/arch/shared/mutex.hpp | 15 | ||||
| -rw-r--r-- | arch/x86_64/src/shared/mutex.cpp | 27 |
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 |
