Provides cross-platform support for thread-local objects. More...
#include <juce_ThreadLocalValue.h>
Classes | |
struct | ObjectHolder |
Public Member Functions | |
ThreadLocalValue ()=default | |
~ThreadLocalValue () | |
Destructor. More... | |
Type & | get () const noexcept |
Returns a reference to this thread's instance of the value. More... | |
operator Type * () const noexcept | |
Returns a pointer to this thread's instance of the value. More... | |
Type & | operator* () const noexcept |
Returns a reference to this thread's instance of the value. More... | |
Type * | operator-> () const noexcept |
Accesses a method or field of the value object. More... | |
ThreadLocalValue & | operator= (const Type &newValue) |
Assigns a new value to the thread-local object. More... | |
void | releaseCurrentThreadStorage () |
Called by a thread before it terminates, to allow this class to release any storage associated with the thread. More... | |
Private Attributes | |
Atomic< ObjectHolder * > | first |
Provides cross-platform support for thread-local objects.
This class holds an internal list of objects of the templated type, keeping an instance for each thread that requests one. The first time a thread attempts to access its value, an object is created and added to the list for that thread.
Typically, you'll probably want to create a static instance of a ThreadLocalValue object, or hold one within a singleton.
The templated class for your value must be a primitive type, or a simple POD struct.
When a thread no longer needs to use its value, it can call releaseCurrentThreadStorage() to allow the storage to be re-used by another thread. If a thread exits without calling this method, the object storage will be left allocated until the ThreadLocalValue object is deleted.
@tags{Core}
|
default |
|
inline |
Destructor.
When this object is deleted, all the value objects for all threads will be deleted.
References juce::ThreadLocalValue< Type >::first.
|
inlinenoexcept |
Returns a reference to this thread's instance of the value.
Note that the first time a thread tries to access the value, an instance of the value object will be created - so if your value's class has a non-trivial constructor, be aware that this method could invoke it.
References juce::Atomic< Type >::compareAndSetBool(), juce::ThreadLocalValue< Type >::first, juce::Atomic< Type >::get(), juce::Thread::getCurrentThreadId(), juce::ThreadLocalValue< Type >::ObjectHolder::next, juce::ThreadLocalValue< Type >::ObjectHolder::object, and juce::ThreadLocalValue< Type >::ObjectHolder::threadId.
Referenced by juce::ThreadLocalValue< Type >::operator Type *(), juce::ThreadLocalValue< Type >::operator*(), juce::ThreadLocalValue< Type >::operator->(), and juce::ThreadLocalValue< Type >::operator=().
|
inlinenoexcept |
Returns a pointer to this thread's instance of the value.
Note that the first time a thread tries to access the value, an instance of the value object will be created - so if your value's class has a non-trivial constructor, be aware that this method could invoke it.
References juce::ThreadLocalValue< Type >::get().
|
inlinenoexcept |
Returns a reference to this thread's instance of the value.
Note that the first time a thread tries to access the value, an instance of the value object will be created - so if your value's class has a non-trivial constructor, be aware that this method could invoke it.
References juce::ThreadLocalValue< Type >::get().
|
inlinenoexcept |
Accesses a method or field of the value object.
Note that the first time a thread tries to access the value, an instance of the value object will be created - so if your value's class has a non-trivial constructor, be aware that this method could invoke it.
References juce::ThreadLocalValue< Type >::get().
|
inline |
Assigns a new value to the thread-local object.
References juce::ThreadLocalValue< Type >::get().
|
inline |
Called by a thread before it terminates, to allow this class to release any storage associated with the thread.
References juce::ThreadLocalValue< Type >::first, and juce::Thread::getCurrentThreadId().
|
mutableprivate |