aboutsummaryrefslogtreecommitdiff
path: root/libs/kstd/include
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2025-07-14 15:39:09 +0000
committerFelix Morgner <felix.morgner@ost.ch>2025-07-14 15:39:09 +0000
commite7eedd234954509f4f5ec52b2d62cbc4a1723936 (patch)
tree7cff3076bf88ad07ed50066a6e7a2f8795dd27f0 /libs/kstd/include
parent22fbbf849497c32f5b237ab70e9ed8aef63e54cf (diff)
downloadteachos-e7eedd234954509f4f5ec52b2d62cbc4a1723936.tar.xz
teachos-e7eedd234954509f4f5ec52b2d62cbc4a1723936.zip
libs: begin extraction of kernel std
Diffstat (limited to 'libs/kstd/include')
-rw-r--r--libs/kstd/include/kstd/mutex.hpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/libs/kstd/include/kstd/mutex.hpp b/libs/kstd/include/kstd/mutex.hpp
new file mode 100644
index 0000000..cf8549f
--- /dev/null
+++ b/libs/kstd/include/kstd/mutex.hpp
@@ -0,0 +1,60 @@
+#ifndef KSTD_MUTEX_HPP
+#define KSTD_MUTEX_HPP
+
+#include <atomic>
+
+namespace kstd
+{
+ /**
+ * @brief Custom mutex implementation, that simply wraps an atomic boolean to keep track if the mutex is already in
+ * use by another thread or not.
+ */
+ struct mutex
+ {
+ /**
+ * @brief Defaulted constructor.
+ */
+ mutex() = default;
+
+ /**
+ * @brief Defaulted destructor.
+ */
+ ~mutex() = default;
+
+ /**
+ * @brief Deleted copy constructor.
+ */
+ mutex(const mutex &) = delete;
+
+ /**
+ * @brief Deleted assignment operator.
+ */
+ mutex & operator=(const mutex &) = delete;
+
+ /**
+ * @brief Lock the mutex (blocks for as long as it is not available).
+ */
+ [[gnu::section(".stl_text")]]
+ auto lock() -> void;
+
+ /**
+ * @brief Try to lock the mutex (non-blocking).
+ *
+ * @return True if lock has been acquired and false otherwise.
+ */
+ [[gnu::section(".stl_text")]]
+ auto try_lock() -> bool;
+
+ /**
+ * @brief Unlock the mutex.
+ */
+ [[gnu::section(".stl_text")]]
+ auto unlock() -> void;
+
+ private:
+ std::atomic<bool> locked = {false}; // Atomic boolean to track if mutex is locked or not.
+ };
+
+} // namespace kstd
+
+#endif \ No newline at end of file