/** * \file libipc/mutex.h * \author mutouyun (orz@orzz.org) * \brief A synchronization primitive that can be used to protect shared data * from being simultaneously accessed by multiple processes. */ #pragma once #include #include #include #include "libimp/export.h" #include "libimp/result.h" #include "libimp/span.h" #include "libimp/byte.h" #include "libipc/def.h" LIBIPC_NAMESPACE_BEG_ struct mutex_handle; using mutex_t = mutex_handle *; /// \brief Create or open a mutex object based on memory. LIBIMP_EXPORT ::LIBIMP::result mutex_open(::LIBIMP::span<::LIBIMP::byte>) noexcept; /// \brief Close the mutex handle. /// \note The mutex object will be destroyed when the last handle is closed, /// and the lifetime of a mutex object needs to be shorter than /// the memory specified when it is created or opened. LIBIMP_EXPORT ::LIBIMP::result mutex_close(mutex_t) noexcept; /// \brief Gets the memory size of the specified mutex. LIBIMP_EXPORT ::LIBIMP::result mutex_size(mutex_t) noexcept; /// \brief Locks the mutex, blocks if the mutex is not available. LIBIMP_EXPORT ::LIBIMP::result mutex_lock(mutex_t, std::int64_t ms) noexcept; /// \brief Tries to lock the mutex, returns if the mutex is not available. LIBIMP_EXPORT ::LIBIMP::result mutex_try_lock(mutex_t) noexcept; /// \brief Unlocks the mutex. LIBIMP_EXPORT ::LIBIMP::result mutex_unlock(mutex_t) noexcept; LIBIPC_NAMESPACE_END_