HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
UT_TaskState Class Reference

A task node for managing which thread is currently working on a given task. More...

#include <UT_TaskState.h>

Public Types

enum  TaskStatus {
  FREE, BUSY_WITH_ARENA, BUSY_NO_ARENA, DONE_WITH_ARENA,
  DONE_NO_ARENA
}
 
using ArenaAndGroup = std::pair< UT_TaskArena, UT_TaskGroup >
 

Public Member Functions

 UT_TaskState ()
 
 ~UT_TaskState ()
 
void reset ()
 
bool isDone () const
 Test whether the task state is marked as DONE. More...
 
TaskStatus tryMarkAsBusy (bool run_in_task_arena=false)
 
TaskStatus tryMarkAsBusyFromDone ()
 
void addWaitingTask (UT_Task &parent_task)
 
void markAsDone (UT_Task *parent_task, bool run_in_task_arena)
 
void markAsDoneNoThread ()
 Non-threaded version of marking as done. More...
 
TaskStatus relaxedLoadStatus () const
 This does a fast (non-atomic) check of the status. More...
 
void setAndRetainArenaGroup (ArenaAndGroup *p)
 
ArenaAndGroupgetArenaGroup () const
 
void decrefArenaGroup ()
 

Detailed Description

A task node for managing which thread is currently working on a given task.

Definition at line 42 of file UT_TaskState.h.

Member Typedef Documentation

Definition at line 225 of file UT_TaskState.h.

Member Enumeration Documentation

Enumerator
FREE 
BUSY_WITH_ARENA 

Thread has acquired responsibility to evaluate node.

BUSY_NO_ARENA 

Another thread is busy evaluating the node with an arena.

DONE_WITH_ARENA 

Another thread is busy evaluating the node without an arena.

DONE_NO_ARENA 

The node has been evaluated with an arena.

The node has been evaluated without an arena.

Definition at line 53 of file UT_TaskState.h.

Constructor & Destructor Documentation

UT_TaskState::UT_TaskState ( )
inline

Definition at line 62 of file UT_TaskState.h.

UT_TaskState::~UT_TaskState ( )
inline

Definition at line 71 of file UT_TaskState.h.

Member Function Documentation

void UT_TaskState::addWaitingTask ( UT_Task parent_task)
inline

Assuming that we're busy, add a waiting task to be spawned when we're free again. This is done a lock-free linked-list style.

Definition at line 148 of file UT_TaskState.h.

void UT_TaskState::decrefArenaGroup ( )
inline

Decrements the reference count for myArenaAndGroup and deletes it if the reference count reaches zero.

Definition at line 241 of file UT_TaskState.h.

ArenaAndGroup* UT_TaskState::getArenaGroup ( ) const
inline

Definition at line 233 of file UT_TaskState.h.

bool UT_TaskState::isDone ( ) const
inline

Test whether the task state is marked as DONE.

Definition at line 91 of file UT_TaskState.h.

void UT_TaskState::markAsDone ( UT_Task parent_task,
bool  run_in_task_arena 
)
inline

Mark this node as being free. We walk through our waiting tasks and spawn them. Since the proxy tasks are just empty tasks, they will complete immediately and decrement the ref count of their parent task. If the ref count of the parent task goes down to 0, then it will then be runnable in the task scheduler.

Definition at line 182 of file UT_TaskState.h.

void UT_TaskState::markAsDoneNoThread ( )
inline

Non-threaded version of marking as done.

Definition at line 208 of file UT_TaskState.h.

TaskStatus UT_TaskState::relaxedLoadStatus ( ) const
inline

This does a fast (non-atomic) check of the status.

Definition at line 220 of file UT_TaskState.h.

void UT_TaskState::reset ( void  )
inline

Set the state to be "free" with no waiting tasks. This cannot be called from within threaded code.

Definition at line 80 of file UT_TaskState.h.

void UT_TaskState::setAndRetainArenaGroup ( ArenaAndGroup p)
inline

Definition at line 227 of file UT_TaskState.h.

TaskStatus UT_TaskState::tryMarkAsBusy ( bool  run_in_task_arena = false)
inline

Attempt to claim this node for the calling thread, returning the current status.

Definition at line 100 of file UT_TaskState.h.

TaskStatus UT_TaskState::tryMarkAsBusyFromDone ( )
inline

Assuming that we're done, claim the node for the calling thread. Returns FREE if succeeded, BUSY if failed.

Definition at line 129 of file UT_TaskState.h.

Member Data Documentation

SYS_AtomicPtr<ArenaAndGroup> UT_TaskState::myArenaAndGroup

Definition at line 259 of file UT_TaskState.h.

SYS_AtomicPtr<UT_TaskStateProxy> UT_TaskState::myWaitingTasks

Definition at line 260 of file UT_TaskState.h.


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