CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
Task Resources

Modules

 FIFO
 
 LIFO
 
 Mutex
 

Data Structures

struct  TaskResource
 Abstract base for shared resources with exclusive access. More...
 

Macros

#define taskresourceRegisterTask(self, task)   (self)->_->registerTask(TaskResource(self), ComplexTask(task))
 
#define taskresourceCanAcquire(self, task)   (self)->_->canAcquire(TaskResource(self), ComplexTask(task))
 
#define taskresourceTryAcquire(self, task)   (self)->_->tryAcquire(TaskResource(self), ComplexTask(task))
 
#define taskresourceRelease(self, task)   (self)->_->release(TaskResource(self), ComplexTask(task))
 

Typedefs

typedef struct TaskResource TaskResource
 Abstract base for shared resources with exclusive access.
 

Detailed Description

TaskResource is the abstract base for all shared resources that tasks can acquire for exclusive access. Resources enable serialized access patterns without blocking worker threads.

Resource lifecycle:

  1. Task calls ctaskRequireResource() to add a resource requirement
  2. Queue calls registerTask() to register the task with the resource
  3. Queue calls canAcquire() to check if acquisition is possible
  4. Queue calls tryAcquire() when resource might be available (MUST NOT block)
  5. Task runs with exclusive resource access
  6. Queue calls release() when task completes

Concrete implementations:

Resources handle their own wakeup mechanisms, typically by advancing waiting tasks out of the defer queue when the resource becomes available.

Macro Definition Documentation

◆ taskresourceCanAcquire

#define taskresourceCanAcquire (   self,
  task 
)    (self)->_->canAcquire(TaskResource(self), ComplexTask(task))

bool taskresourceCanAcquire(TaskResource* self, ComplexTask* task);

Check if task can attempt to acquire the resource now.

Parameters
taskTask checking acquisition possibility
Returns
true if tryAcquire() should be called

Definition at line 95 of file taskresource.h.

◆ taskresourceRegisterTask

#define taskresourceRegisterTask (   self,
  task 
)    (self)->_->registerTask(TaskResource(self), ComplexTask(task))

bool taskresourceRegisterTask(TaskResource* self, ComplexTask* task);

Register task with resource for later notification. Reserves a slot in FIFO/LIFO queues. Registration is consumed by successful acquisition.

Parameters
taskTask to register
Returns
true if registration was successful

Definition at line 89 of file taskresource.h.

◆ taskresourceRelease

#define taskresourceRelease (   self,
  task 
)    (self)->_->release(TaskResource(self), ComplexTask(task))

void taskresourceRelease(TaskResource* self, ComplexTask* task);

Release resource previously acquired by task. State tracking is maintained by caller.

Parameters
taskTask releasing resource

Definition at line 108 of file taskresource.h.

◆ taskresourceTryAcquire

#define taskresourceTryAcquire (   self,
  task 
)    (self)->_->tryAcquire(TaskResource(self), ComplexTask(task))

bool taskresourceTryAcquire(TaskResource* self, ComplexTask* task);

Try to acquire resource exclusively for task. MUST NOT block. State tracking (owned flag) is maintained by caller (TaskRequiresResource).

Parameters
taskTask acquiring resource
Returns
true if resource was acquired

Definition at line 102 of file taskresource.h.