class ugcs::vsm::Shared_mutex_file¶
Overview¶
Cross-platform named mutex. More…
#include <shared_mutex_file.h> class Shared_mutex_file: public std::enable_shared_from_this< Shared_mutex_file > { public: // typedefs typedef std::shared_ptr<Shared_mutex_file> Ptr; typedef std::weak_ptr<Shared_mutex_file> Weak_ptr; typedef File_processor::Stream::Lock_handler Acquire_handler; // construction Shared_mutex_file(const std::string& name, File_processor::Ptr = File_processor::Get_instance()); // methods template <typename... Args> static Ptr Create(Args&&... args); template <class __Callable, typename... __Args> __DEFINE_CALLBACK_BUILDER_BODY(Make_acquire_handler, (Io_result), (Io_result::OTHER_FAILURE)); Operation_waiter Acquire(Acquire_handler completion_handler, Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create()); Operation_waiter Release(Acquire_handler completion_handler = Make_dummy_callback<void, Io_result>(), Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create()); };
Detailed Documentation¶
Cross-platform named mutex.
Typedefs¶
typedef std::shared_ptr<Shared_mutex_file> Ptr
Pointer type.
typedef std::weak_ptr<Shared_mutex_file> Weak_ptr
Pointer type.
typedef File_processor::Stream::Lock_handler Acquire_handler
Acquire Callback prototype.
void Callback(result, void* mem_pointer, …) It is ok to call Release() from this function, too.
Parameters:
result |
See Acquire_result above |
mem_pointer |
Pointer to memory region. If the mem_pointer is not nullptr then user can freely access mem_size count bytes. User is free to use the memory from any thread. |
… |
Any other user supplied arguments |
Construction¶
Shared_mutex_file(const std::string& name, File_processor::Ptr = File_processor::Get_instance())
Creates shared memory region which can be accessed via Acquire call.
Parameters:
name |
Name of shared memory region. |
Methods¶
template <typename... Args> static Ptr Create(Args&&... args)
Create an instance.
template <class __Callable, typename... __Args> __DEFINE_CALLBACK_BUILDER_BODY( Make_acquire_handler, (Io_result), (Io_result::OTHER_FAILURE) )
Builder for acquire handler.
Operation_waiter Acquire(Acquire_handler completion_handler, Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create())
Acquires exclusive lock.
IMPORTANT: Operation_waiter timoeut or cancelation DOES NOT prevent completion_handler from being called.
Parameters:
completion_handler |
User supplied callback. See above. |
comp_ctx |
User supplied completion context in which completion_handler will execute. |
Returns:
Operation_waiter Can be used to acquire memory synchronously or with timeout.
Operation_waiter Release(Acquire_handler completion_handler = Make_dummy_callback<void, Io_result>(), Request_completion_context::Ptr comp_ctx = Request_temp_completion_context::Create())
Releases previously acquired lock.