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

std::mutex replacement for asynchronous tasks More...

#include <userver/engine/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 ()
 
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)
 

Detailed Description

std::mutex replacement for asynchronous tasks

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 26 of file mutex.hpp.

Member Function Documentation

◆ lock()

void engine::Mutex::lock ( )

Locks the mutex. Blocks current coroutine if the mutex is locked by another coroutine.

Note
the behaviour is undefined if a coroutine tries to lock a mutex which is already locked by the current coroutine.
the method waits for the mutex even if the current task is cancelled.

◆ try_lock_for()

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

Definition at line 68 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)

Definition at line 73 of file mutex.hpp.

◆ unlock()

void engine::Mutex::unlock ( )

Unlocks the mutex. The mutex must be locked by the current coroutine.

Note
the behaviour is undefined if a coroutine tries to unlock a mutex which is not locked or is locked by another coroutine
the order of coroutines to unblock is unspecified. Any code assuming any specific order (e.g. FIFO) is incorrect and must be fixed.

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