VTK-m
2.0
|
A token to hold the scope of an ArrayHandle
or other object.
More...
#include <Token.h>
Classes | |
struct | ObjectReference |
struct | ObjectReferenceImpl |
class | Reference |
Public Types | |
using | ReferenceCount = vtkm::IdComponent |
Use this type to represent counts of how many tokens are holding a resource. More... | |
Public Member Functions | |
VTKM_CONT | Token () |
VTKM_CONT | Token (Token &&rhs) |
VTKM_CONT | ~Token () |
VTKM_CONT void | DetachFromAll () |
Detaches this Token from all resources to allow them to be used elsewhere or deleted. More... | |
VTKM_CONT bool | IsAttached (vtkm::cont::Token::ReferenceCount *referenceCountPointer) const |
Determine if this Token is already attached to an object. More... | |
VTKM_CONT Reference | GetReference () const |
Returns a reference object to this Token . More... | |
template<typename T > | |
VTKM_CONT void | Attach (T &&object, vtkm::cont::Token::ReferenceCount *referenceCountPointer, std::unique_lock< std::mutex > &lock, std::condition_variable *conditionVariablePointer) |
Add an object to attach to the Token . More... | |
template<typename T > | |
VTKM_CONT void | Attach (T &&object, vtkm::cont::Token::ReferenceCount *referenceCountPoiner, std::mutex *mutexPointer, std::condition_variable *conditionVariablePointer) |
Add an object to attach to the Token . More... | |
Private Member Functions | |
VTKM_CONT void | Attach (std::unique_ptr< vtkm::cont::Token::ObjectReference > &&objectReference, vtkm::cont::Token::ReferenceCount *referenceCountPointer, std::unique_lock< std::mutex > &lock, std::condition_variable *conditionVariablePointer) |
VTKM_CONT bool | IsAttached (std::unique_lock< std::mutex > &lock, vtkm::cont::Token::ReferenceCount *referenceCountPointer) const |
Private Attributes | |
std::unique_ptr< InternalStruct > | Internals |
A token to hold the scope of an ArrayHandle
or other object.
A Token
is an object that is held in the stack or state of another object and is used when creating references to resouces that may be used by other threads. For example, when preparing an ArrayHandle
or ExecutionObject
for a device, a Token
is given. The returned object will be valid as long as the Token
remains in scope.
Use this type to represent counts of how many tokens are holding a resource.
VTKM_CONT vtkm::cont::Token::Token | ( | ) |
VTKM_CONT vtkm::cont::Token::~Token | ( | ) |
|
private |
|
inline |
Add an object to attach to the Token
.
To attach an object to a Token
, you need the object itself, a pointer to a Token::ReferenceCount
that is used to count how many Token
s hold the object, a pointer to a std::mutex
used to safely use the ReferenceCount
, and a pointer to a std::condition_variable
that other threads will wait on if they are blocked by the Token
(using the same mutex
in the given unique_lock
). The mutex can also be passed in as a std::unique_lock<std::mutex>
to signal whether or not the mutex is already locked by the current thread.
When the Token
is attached, it will increment the reference count (safely with the mutex) and store away these items. Other items will be able tell if a token is attached to the object by looking at the reference count.
When the Token
is released, it will decrement the reference count (safely with the mutex) and then notify all threads waiting on the condition variable.
|
inline |
Add an object to attach to the Token
.
To attach an object to a Token
, you need the object itself, a pointer to a Token::ReferenceCount
that is used to count how many Token
s hold the object, a pointer to a std::mutex
used to safely use the ReferenceCount
, and a pointer to a std::condition_variable
that other threads will wait on if they are blocked by the Token
(using the same mutex
in the given unique_lock
). The mutex can also be passed in as a std::unique_lock<std::mutex>
to signal whether or not the mutex is already locked by the current thread.
When the Token
is attached, it will increment the reference count (safely with the mutex) and store away these items. Other items will be able tell if a token is attached to the object by looking at the reference count.
When the Token
is released, it will decrement the reference count (safely with the mutex) and then notify all threads waiting on the condition variable.
VTKM_CONT void vtkm::cont::Token::DetachFromAll | ( | ) |
Detaches this Token
from all resources to allow them to be used elsewhere or deleted.
Returns a reference object to this Token
.
Token
objects cannot be copied and generally are not shared. However, there are cases where you need to save a reference to a Token
belonging to someone else so that it can later be compared. Saving a pointer to a Token
is not always safe because Token
s can be moved. To get around this problem, you can save a Reference
to the Token
. You cannot use the Reference
to manipulate the Token
in any way (because you do not own it). Rather, a Reference
can just be used to compare to a Token
object (or another Reference
).
|
private |
VTKM_CONT bool vtkm::cont::Token::IsAttached | ( | vtkm::cont::Token::ReferenceCount * | referenceCountPointer | ) | const |
|
mutableprivate |