Open Search
    ThreadSafeRef< REFERENCE > Class Template Reference

    #include <threadsaferef.h>

    Inheritance diagram for ThreadSafeRef< REFERENCE >:

    Detailed Description

    template<typename REFERENCE>
    class maxon::ThreadSafeRef< REFERENCE >

    Template for safe access to BaseRef from multiple threads. This comes at the cost of extra atomic operations and will cause high contention if used thoughtless.

    ThreadSafeRef<SampleClassRef> g_global;
    // consumer thread
    SampleClassRef now = g_global;
    // producer thread
    SampleClassRef newObject = CreateSomething();
    g_global = newObject;
    Note
    If there is high contention a queue will perform much better (no matter if you use a job queue or a MPMC queue to store the objects only).
    Template Parameters
    REFERENCEType of the reference that will be stored thread-safe.

    Public Member Functions

     ThreadSafeRef ()
     
     ThreadSafeRef (const REFERENCE &strongReference)
     
     ThreadSafeRef (const ThreadSafeRef &src)
     
     ThreadSafeRef (ThreadSafeRef &&src)
     
     ~ThreadSafeRef ()
     
    ThreadSafeRefoperator= (const REFERENCE &strongReference)
     
    Bool TryCompareAndSwap (const REFERENCE &strongReference, const REFERENCE &compare)
     
    ThreadSafeRefoperator= (const ThreadSafeRef &src)
     
    ThreadSafeRefoperator= (std::nullptr_t)
     
    ThreadSafeRefoperator= (ThreadSafeRef &&src)
     
    REFERENCE Get () const
     
     operator REFERENCE () const
     

    Private Types

    using DereferencedPtr = typename REFERENCE::ReferencedType *
     

    Additional Inherited Members

    - Protected Member Functions inherited from ThreadSafePtr< REFERENCE::ReferencedType * >
    MAXON_IMPLICIT ThreadSafePtr (REFERENCE::ReferencedType * src=nullptr)
     
     ~ThreadSafePtr ()
     
    REFERENCE::ReferencedType * AcquirePtr () const
     
    void ReleasePtr (REFERENCE::ReferencedType * ptr) const
     
    REFERENCE::ReferencedType * ChangePtr (REFERENCE::ReferencedType * ptr) const
     
    Bool TryCompareAndSwapPtr (REFERENCE::ReferencedType * ptr, REFERENCE::ReferencedType * compare) const
     
    REFERENCE::ReferencedType * AttemptAcquirePtr () const
     
    - Protected Attributes inherited from ThreadSafePtr< REFERENCE::ReferencedType * >
    AtomicUInt _ptr
     

    Member Typedef Documentation

    ◆ DereferencedPtr

    using DereferencedPtr = typename REFERENCE::ReferencedType*
    private

    Constructor & Destructor Documentation

    ◆ ThreadSafeRef() [1/4]

    ◆ ThreadSafeRef() [2/4]

    ThreadSafeRef ( const REFERENCE &  strongReference)
    explicit
    Parameters
    [in]strongReferenceBaseRef with strong reference to an object.

    ◆ ThreadSafeRef() [3/4]

    ThreadSafeRef ( const ThreadSafeRef< REFERENCE > &  src)

    Copy constructs a thread safe pointer. THREADSAFE.

    Parameters
    [in]srcSource thread safe pointer.

    ◆ ThreadSafeRef() [4/4]

    ThreadSafeRef ( ThreadSafeRef< REFERENCE > &&  src)

    Moves a thread safe pointer. THREADSAFE.

    Parameters
    [in]srcSource thread safe pointer.

    ◆ ~ThreadSafeRef()

    THREADSAFE.

    Member Function Documentation

    ◆ operator=() [1/4]

    ThreadSafeRef& operator= ( const REFERENCE &  strongReference)

    Adds a strong reference. THREADSAFE.

    Parameters
    [in]strongReferenceBaseRef with strong reference to an object.
    Returns
    *this.

    ◆ TryCompareAndSwap()

    Bool TryCompareAndSwap ( const REFERENCE &  strongReference,
    const REFERENCE &  compare 
    )

    Atomic compare and swap of the reference. THREADSAFE.

    Parameters
    [in]strongReferenceBaseRef with strong reference to an object.
    [in]compareOld BaseRef to compare with current value.
    Returns
    True if the reference was exchanged.

    ◆ operator=() [2/4]

    ThreadSafeRef& operator= ( const ThreadSafeRef< REFERENCE > &  src)

    Copies a thread safe pointer.

    Parameters
    [in]srcSource thread safe pointer.
    Returns
    *this.

    ◆ operator=() [3/4]

    ThreadSafeRef& operator= ( std::nullptr_t  )

    Resets the thread safe pointer.

    Returns
    *this.

    ◆ operator=() [4/4]

    ThreadSafeRef& operator= ( ThreadSafeRef< REFERENCE > &&  src)

    Moves a thread safe pointer.

    Parameters
    [in]srcSource thread safe pointer.
    Returns
    *this.

    ◆ Get()

    REFERENCE Get ( ) const

    Constructs a new BaseRef with a strong reference. THREADSAFE.

    Returns
    BaseRef with a strong reference.

    ◆ operator REFERENCE()

    operator REFERENCE ( ) const

    Constructs a new BaseRef with a strong reference. THREADSAFE.

    Returns
    BaseRef with a strong reference.