POSIX Shared Memory Data Structures 1.0
High-performance lock-free data structures for inter-process communication
Loading...
Searching...
No Matches
shm_atomic< T, TableType > Class Template Reference

Shared memory atomic value with auto-discovery. More...

#include <shm_atomic.h>

Public Types

using value_type = T
 

Public Member Functions

template<typename ShmType >
 shm_atomic (ShmType &shm, std::string_view name, T initial_value=T{})
 Create or open a shared atomic value.
 
bool is_lock_free () const noexcept
 
void store (T value, std::memory_order order=std::memory_order_seq_cst) noexcept
 
load (std::memory_order order=std::memory_order_seq_cst) const noexcept
 
exchange (T value, std::memory_order order=std::memory_order_seq_cst) noexcept
 
bool compare_exchange_weak (T &expected, T desired, std::memory_order success=std::memory_order_seq_cst, std::memory_order failure=std::memory_order_seq_cst) noexcept
 
bool compare_exchange_strong (T &expected, T desired, std::memory_order success=std::memory_order_seq_cst, std::memory_order failure=std::memory_order_seq_cst) noexcept
 
template<typename U = T>
requires std::is_integral_v<U> || std::is_floating_point_v<U>
fetch_add (T arg, std::memory_order order=std::memory_order_seq_cst) noexcept
 
template<typename U = T>
requires std::is_integral_v<U> || std::is_floating_point_v<U>
fetch_sub (T arg, std::memory_order order=std::memory_order_seq_cst) noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
fetch_and (T arg, std::memory_order order=std::memory_order_seq_cst) noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
fetch_or (T arg, std::memory_order order=std::memory_order_seq_cst) noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
fetch_xor (T arg, std::memory_order order=std::memory_order_seq_cst) noexcept
 
operator= (T value) noexcept
 
 operator T () const noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
operator++ () noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
operator++ (int) noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
operator-- () noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
operator-- (int) noexcept
 
template<typename U = T>
requires std::is_integral_v<U> || std::is_floating_point_v<U>
operator+= (T arg) noexcept
 
template<typename U = T>
requires std::is_integral_v<U> || std::is_floating_point_v<U>
operator-= (T arg) noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
operator&= (T arg) noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
operator|= (T arg) noexcept
 
template<typename U = T>
requires std::is_integral_v<U>
operator^= (T arg) noexcept
 
std::string_view name () const noexcept
 
void wait (T old, std::memory_order order=std::memory_order_seq_cst) const noexcept
 
void notify_one () noexcept
 
void notify_all () noexcept
 

Static Public Attributes

static constexpr bool is_always_lock_free = std::atomic<T>::is_always_lock_free
 

Detailed Description

template<typename T, typename TableType = shm_table>
requires std::is_trivially_copyable_v<T> && std::atomic<T>
class shm_atomic< T, TableType >

Shared memory atomic value with auto-discovery.

Provides a named atomic value in shared memory that can be discovered by other processes. Fully compatible with std::atomic interface.

Template Parameters
TType of the atomic value (must be trivially copyable and lock-free)
TableTypeType of metadata table (default: shm_table)

Definition at line 19 of file shm_atomic.h.

Member Typedef Documentation

◆ value_type

template<typename T , typename TableType = shm_table>
using shm_atomic< T, TableType >::value_type = T

Definition at line 32 of file shm_atomic.h.

Constructor & Destructor Documentation

◆ shm_atomic()

template<typename T , typename TableType = shm_table>
template<typename ShmType >
shm_atomic< T, TableType >::shm_atomic ( ShmType &  shm,
std::string_view  name,
initial_value = T{} 
)
inline

Create or open a shared atomic value.

Definition at line 38 of file shm_atomic.h.

Member Function Documentation

◆ compare_exchange_strong()

template<typename T , typename TableType = shm_table>
bool shm_atomic< T, TableType >::compare_exchange_strong ( T &  expected,
desired,
std::memory_order  success = std::memory_order_seq_cst,
std::memory_order  failure = std::memory_order_seq_cst 
)
inlinenoexcept

Definition at line 102 of file shm_atomic.h.

◆ compare_exchange_weak()

template<typename T , typename TableType = shm_table>
bool shm_atomic< T, TableType >::compare_exchange_weak ( T &  expected,
desired,
std::memory_order  success = std::memory_order_seq_cst,
std::memory_order  failure = std::memory_order_seq_cst 
)
inlinenoexcept

Definition at line 96 of file shm_atomic.h.

◆ exchange()

template<typename T , typename TableType = shm_table>
T shm_atomic< T, TableType >::exchange ( value,
std::memory_order  order = std::memory_order_seq_cst 
)
inlinenoexcept

Definition at line 92 of file shm_atomic.h.

◆ fetch_add()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U> || std::is_floating_point_v<U>
T shm_atomic< T, TableType >::fetch_add ( arg,
std::memory_order  order = std::memory_order_seq_cst 
)
inlinenoexcept

◆ fetch_and()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::fetch_and ( arg,
std::memory_order  order = std::memory_order_seq_cst 
)
inlinenoexcept

Definition at line 124 of file shm_atomic.h.

Referenced by shm_atomic< T, TableType >::operator&=().

◆ fetch_or()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::fetch_or ( arg,
std::memory_order  order = std::memory_order_seq_cst 
)
inlinenoexcept

Definition at line 130 of file shm_atomic.h.

Referenced by shm_atomic< T, TableType >::operator|=().

◆ fetch_sub()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U> || std::is_floating_point_v<U>
T shm_atomic< T, TableType >::fetch_sub ( arg,
std::memory_order  order = std::memory_order_seq_cst 
)
inlinenoexcept

◆ fetch_xor()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::fetch_xor ( arg,
std::memory_order  order = std::memory_order_seq_cst 
)
inlinenoexcept

Definition at line 136 of file shm_atomic.h.

Referenced by shm_atomic< T, TableType >::operator^=().

◆ is_lock_free()

template<typename T , typename TableType = shm_table>
bool shm_atomic< T, TableType >::is_lock_free ( ) const
inlinenoexcept

Definition at line 78 of file shm_atomic.h.

◆ load()

template<typename T , typename TableType = shm_table>
T shm_atomic< T, TableType >::load ( std::memory_order  order = std::memory_order_seq_cst) const
inlinenoexcept

◆ name()

template<typename T , typename TableType = shm_table>
std::string_view shm_atomic< T, TableType >::name ( ) const
inlinenoexcept

Definition at line 207 of file shm_atomic.h.

◆ notify_all()

template<typename T , typename TableType = shm_table>
void shm_atomic< T, TableType >::notify_all ( )
inlinenoexcept

Definition at line 220 of file shm_atomic.h.

◆ notify_one()

template<typename T , typename TableType = shm_table>
void shm_atomic< T, TableType >::notify_one ( )
inlinenoexcept

Definition at line 216 of file shm_atomic.h.

◆ operator T()

template<typename T , typename TableType = shm_table>
shm_atomic< T, TableType >::operator T ( ) const
inlinenoexcept

Definition at line 146 of file shm_atomic.h.

References shm_atomic< T, TableType >::load().

◆ operator&=()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::operator&= ( arg)
inlinenoexcept

Definition at line 190 of file shm_atomic.h.

References shm_atomic< T, TableType >::fetch_and().

◆ operator++() [1/2]

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::operator++ ( )
inlinenoexcept

Definition at line 153 of file shm_atomic.h.

References shm_atomic< T, TableType >::fetch_add().

◆ operator++() [2/2]

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::operator++ ( int  )
inlinenoexcept

Definition at line 159 of file shm_atomic.h.

References shm_atomic< T, TableType >::fetch_add().

◆ operator+=()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U> || std::is_floating_point_v<U>
T shm_atomic< T, TableType >::operator+= ( arg)
inlinenoexcept

Definition at line 178 of file shm_atomic.h.

References shm_atomic< T, TableType >::fetch_add().

◆ operator--() [1/2]

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::operator-- ( )
inlinenoexcept

Definition at line 165 of file shm_atomic.h.

References shm_atomic< T, TableType >::fetch_sub().

◆ operator--() [2/2]

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::operator-- ( int  )
inlinenoexcept

Definition at line 171 of file shm_atomic.h.

References shm_atomic< T, TableType >::fetch_sub().

◆ operator-=()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U> || std::is_floating_point_v<U>
T shm_atomic< T, TableType >::operator-= ( arg)
inlinenoexcept

Definition at line 184 of file shm_atomic.h.

References shm_atomic< T, TableType >::fetch_sub().

◆ operator=()

template<typename T , typename TableType = shm_table>
T shm_atomic< T, TableType >::operator= ( value)
inlinenoexcept

Definition at line 141 of file shm_atomic.h.

References shm_atomic< T, TableType >::store().

◆ operator^=()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::operator^= ( arg)
inlinenoexcept

Definition at line 202 of file shm_atomic.h.

References shm_atomic< T, TableType >::fetch_xor().

◆ operator|=()

template<typename T , typename TableType = shm_table>
template<typename U = T>
requires std::is_integral_v<U>
T shm_atomic< T, TableType >::operator|= ( arg)
inlinenoexcept

Definition at line 196 of file shm_atomic.h.

References shm_atomic< T, TableType >::fetch_or().

◆ store()

template<typename T , typename TableType = shm_table>
void shm_atomic< T, TableType >::store ( value,
std::memory_order  order = std::memory_order_seq_cst 
)
inlinenoexcept

Definition at line 84 of file shm_atomic.h.

Referenced by shm_atomic< T, TableType >::operator=().

◆ wait()

template<typename T , typename TableType = shm_table>
void shm_atomic< T, TableType >::wait ( old,
std::memory_order  order = std::memory_order_seq_cst 
) const
inlinenoexcept

Definition at line 212 of file shm_atomic.h.

Member Data Documentation

◆ is_always_lock_free

template<typename T , typename TableType = shm_table>
constexpr bool shm_atomic< T, TableType >::is_always_lock_free = std::atomic<T>::is_always_lock_free
staticconstexpr

Definition at line 82 of file shm_atomic.h.


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