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.