diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-01-11 16:53:11 +0100 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-01-30 14:47:05 +0100 |
commit | d9b19be1d9c1baa5e8b92c1960c14e435e6b532f (patch) | |
tree | da083beea826952f0a9c07ab392992ef6ca84c5c /src/core/hle/kernel/semaphore.h | |
parent | Kernel: Convert SharedMemory to not use Handles (diff) | |
download | yuzu-d9b19be1d9c1baa5e8b92c1960c14e435e6b532f.tar yuzu-d9b19be1d9c1baa5e8b92c1960c14e435e6b532f.tar.gz yuzu-d9b19be1d9c1baa5e8b92c1960c14e435e6b532f.tar.bz2 yuzu-d9b19be1d9c1baa5e8b92c1960c14e435e6b532f.tar.lz yuzu-d9b19be1d9c1baa5e8b92c1960c14e435e6b532f.tar.xz yuzu-d9b19be1d9c1baa5e8b92c1960c14e435e6b532f.tar.zst yuzu-d9b19be1d9c1baa5e8b92c1960c14e435e6b532f.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/semaphore.h | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/src/core/hle/kernel/semaphore.h b/src/core/hle/kernel/semaphore.h index 8644ecf0c..b7f22b86e 100644 --- a/src/core/hle/kernel/semaphore.h +++ b/src/core/hle/kernel/semaphore.h @@ -4,29 +4,50 @@ #pragma once +#include <queue> +#include <string> + #include "common/common_types.h" #include "core/hle/kernel/kernel.h" namespace Kernel { -/** - * Creates a semaphore. - * @param handle Pointer to the handle of the newly created object - * @param initial_count Number of slots reserved for other threads - * @param max_count Maximum number of slots the semaphore can have - * @param name Optional name of semaphore - * @return ResultCode of the error - */ -ResultCode CreateSemaphore(Handle* handle, s32 initial_count, s32 max_count, const std::string& name = "Unknown"); - -/** - * Releases a certain number of slots from a semaphore. - * @param count The number of free slots the semaphore had before this call - * @param handle The handle of the semaphore to release - * @param release_count The number of slots to release - * @return ResultCode of the error - */ -ResultCode ReleaseSemaphore(s32* count, Handle handle, s32 release_count); +class Semaphore : public WaitObject { +public: + /** + * Creates a semaphore. + * @param handle Pointer to the handle of the newly created object + * @param initial_count Number of slots reserved for other threads + * @param max_count Maximum number of slots the semaphore can have + * @param name Optional name of semaphore + * @return The created semaphore + */ + static ResultVal<SharedPtr<Semaphore>> Create(s32 initial_count, s32 max_count, + std::string name = "Unknown"); + + std::string GetTypeName() const override { return "Semaphore"; } + std::string GetName() const override { return name; } + + static const HandleType HANDLE_TYPE = HandleType::Semaphore; + HandleType GetHandleType() const override { return HANDLE_TYPE; } + + s32 max_count; ///< Maximum number of simultaneous holders the semaphore can have + s32 available_count; ///< Number of free slots left in the semaphore + std::string name; ///< Name of semaphore (optional) + + bool ShouldWait() override; + void Acquire() override; + + /** + * Releases a certain number of slots from a semaphore. + * @param release_count The number of slots to release + * @return The number of free slots the semaphore had before this call + */ + ResultVal<s32> Release(s32 release_count); + +private: + Semaphore() = default; +}; } // namespace |