tin  1.5.9
tsm::mutex< T, MaxWaiters > Class Template Reference

#include <sync.h>

Collaboration diagram for tsm::mutex< T, MaxWaiters >:
Collaboration graph

Classes

class  lock_awaitable
 

Public Member Functions

template<typename... Args>
 mutex (Args &&... args)
 
 mutex ()=default
 
lock_awaitable lock () noexcept
 
void unlock () noexcept
 
template<typename Fn >
decltype(auto) with_lock (Fn &&fn)
 
bool locked () const noexcept
 
T & unsafe_value () noexcept
 
T const & unsafe_value () const noexcept
 

Detailed Description

template<typename T, std::size_t MaxWaiters = 4U>
class tsm::mutex< T, MaxWaiters >

Cooperative mutex for coroutine tasks.

The mutex protects a payload value and never blocks an OS thread. A task that awaits lock() is suspended if the mutex is owned; unlock() wakes one waiter. This mutex is intentionally not recursive.

Constructor & Destructor Documentation

◆ mutex() [1/2]

template<typename T , std::size_t MaxWaiters = 4U>
template<typename... Args>
tsm::mutex< T, MaxWaiters >::mutex ( Args &&...  args)
inlineexplicit

◆ mutex() [2/2]

template<typename T , std::size_t MaxWaiters = 4U>
tsm::mutex< T, MaxWaiters >::mutex ( )
default

Member Function Documentation

◆ lock()

template<typename T , std::size_t MaxWaiters = 4U>
lock_awaitable tsm::mutex< T, MaxWaiters >::lock ( )
inlinenoexcept

◆ locked()

template<typename T , std::size_t MaxWaiters = 4U>
bool tsm::mutex< T, MaxWaiters >::locked ( ) const
inlinenoexcept

◆ unlock()

template<typename T , std::size_t MaxWaiters = 4U>
void tsm::mutex< T, MaxWaiters >::unlock ( )
inlinenoexcept

◆ unsafe_value() [1/2]

template<typename T , std::size_t MaxWaiters = 4U>
T const& tsm::mutex< T, MaxWaiters >::unsafe_value ( ) const
inlinenoexcept

◆ unsafe_value() [2/2]

template<typename T , std::size_t MaxWaiters = 4U>
T& tsm::mutex< T, MaxWaiters >::unsafe_value ( )
inlinenoexcept

◆ with_lock()

template<typename T , std::size_t MaxWaiters = 4U>
template<typename Fn >
decltype(auto) tsm::mutex< T, MaxWaiters >::with_lock ( Fn &&  fn)
inline

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