userver: engine::Mutex Class Reference
Loading...
Searching...
No Matches
engine::Mutex Class Referencefinal

#include <userver/engine/mutex.hpp>

Detailed Description

std::mutex replacement for asynchronous tasks.

Ignores task cancellations (succeeds even if the current task is cancelled).

Example usage:

constexpr std::string_view kTestData = "Test Data";
{
std::lock_guard<engine::Mutex> lock(mutex);
// accessing data under a mutex
const auto x = kTestData;
ASSERT_EQ(kTestData, x);
}
See also
Synchronization Primitives

Definition at line 28 of file mutex.hpp.

Public Member Functions

 Mutex (const Mutex &)=delete
 
 Mutex (Mutex &&)=delete
 
Mutexoperator= (const Mutex &)=delete
 
Mutexoperator= (Mutex &&)=delete
 
void lock ()
 
void unlock ()
 
bool try_lock () noexcept
 
template<typename Rep , typename Period >
bool try_lock_for (const std::chrono::duration< Rep, Period > &)
 
template<typename Clock , typename Duration >
bool try_lock_until (const std::chrono::time_point< Clock, Duration > &)
 
bool try_lock_until (Deadline deadline)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 

Member Function Documentation

◆ lock()

void engine::Mutex::lock ( )

Locks the mutex. Blocks current coroutine if the mutex is locked by another coroutine. Throws if a coroutine tries to lock a mutex which is already locked by the current coroutine.

Note
The method waits for the mutex even if the current task is cancelled.

◆ try_lock()

bool engine::Mutex::try_lock ( )
noexcept

Tries to lock the mutex without blocking the coroutine, returns true if succeeded.

Note
The behavior of the function is not affected by the cancellation requests.

◆ try_lock_for()

template<typename Rep , typename Period >
bool engine::Mutex::try_lock_for ( const std::chrono::duration< Rep, Period > & duration)

Tries to lock the mutex in specified duration. Blocks current coroutine if the mutex is locked by another coroutine up to the provided duration. Throws if a coroutine tries to lock a mutex which is already locked by the current coroutine.

Returns
true if the locking succeeded
Note
The method waits for the mutex even if the current task is cancelled.

Definition at line 94 of file mutex.hpp.

◆ try_lock_until()

template<typename Clock , typename Duration >
bool engine::Mutex::try_lock_until ( const std::chrono::time_point< Clock, Duration > & until)

Tries to lock the mutex till specified time point. Blocks current coroutine if the mutex is locked by another coroutine up to the provided time point. Throws if a coroutine tries to lock a mutex which is already locked by the current coroutine.

Returns
true if the locking succeeded
Note
The method waits for the mutex even if the current task is cancelled.

Definition at line 99 of file mutex.hpp.

◆ unlock()

void engine::Mutex::unlock ( )

Unlocks the mutex. Before calling this method the mutex should be locked by the current coroutine.

Note
the order of coroutines to unblock is unspecified. Any code assuming any specific order (e.g. FIFO) is incorrect and should be fixed.

The documentation for this class was generated from the following file: