Hermes
Simulation Orchestration Platform for Aerospace
Loading...
Searching...
No Matches
hermes.backplane.sync.FrameBarrier Class Reference

Public Member Functions

None __init__ (self, str name, int count)
str name (self)
int count (self)
None create (self)
None attach (self)
None signal_step (self)
bool wait_step (self, float|None timeout=None)
None signal_done (self)
bool wait_all_done (self, float|None timeout=None)
None close (self)
None destroy (self)
FrameBarrier __enter__ (self)
None __exit__ (self, *object args)

Protected Attributes

str _name = name
int _count = count
posix_ipc.Semaphore|None _step_sem = None
posix_ipc.Semaphore|None _done_sem = None

Detailed Description

Synchronization barrier for frame execution.

Coordinates multiple module processes to execute frames in lockstep.
Uses two semaphores:
- step_sem: Scheduler signals modules to start stepping
- done_sem: Modules signal completion to scheduler

Example:
    # Scheduler side
    barrier = FrameBarrier("/hermes_barrier", count=3)
    barrier.create()
    barrier.signal_step()  # Release all modules
    barrier.wait_all_done()  # Wait for all to finish

    # Module side
    barrier = FrameBarrier("/hermes_barrier", count=3)
    barrier.attach()
    barrier.wait_step()  # Wait for scheduler
    # ... execute frame ...
    barrier.signal_done()  # Signal completion

Constructor & Destructor Documentation

◆ __init__()

None hermes.backplane.sync.FrameBarrier.__init__ ( self,
str name,
int count )
Initialize frame barrier.

Args:
    name: Base name for semaphores (e.g., "/hermes_barrier")
    count: Number of module processes to synchronize

Raises:
    SemaphoreError: If count is less than 1

Member Function Documentation

◆ __enter__()

FrameBarrier hermes.backplane.sync.FrameBarrier.__enter__ ( self)

◆ __exit__()

None hermes.backplane.sync.FrameBarrier.__exit__ ( self,
*object args )

◆ attach()

None hermes.backplane.sync.FrameBarrier.attach ( self)
Attach to existing barrier semaphores.

Raises:
    SemaphoreError: If already attached
    posix_ipc.ExistentialError: If semaphores don't exist

◆ close()

None hermes.backplane.sync.FrameBarrier.close ( self)
Close semaphore handles without destroying.

◆ count()

int hermes.backplane.sync.FrameBarrier.count ( self)
Number of processes to synchronize.

◆ create()

None hermes.backplane.sync.FrameBarrier.create ( self)
Create barrier semaphores.

Raises:
    SemaphoreError: If already created
    posix_ipc.ExistentialError: If semaphores already exist

◆ destroy()

None hermes.backplane.sync.FrameBarrier.destroy ( self)
Destroy the barrier semaphores.

Should only be called by the creator after all users close.

◆ name()

str hermes.backplane.sync.FrameBarrier.name ( self)
Barrier name.

◆ signal_done()

None hermes.backplane.sync.FrameBarrier.signal_done ( self)
Module: signal that step execution is complete.

◆ signal_step()

None hermes.backplane.sync.FrameBarrier.signal_step ( self)
Scheduler: signal all modules to execute a step.

Releases the step semaphore `count` times so all modules
can proceed.

◆ wait_all_done()

bool hermes.backplane.sync.FrameBarrier.wait_all_done ( self,
float | None timeout = None )
Scheduler: wait for all modules to complete.

Args:
    timeout: Maximum seconds to wait per module, None for infinite

Returns:
    True if all done, False if any timeout

◆ wait_step()

bool hermes.backplane.sync.FrameBarrier.wait_step ( self,
float | None timeout = None )
Module: wait for step signal from scheduler.

Args:
    timeout: Maximum seconds to wait, None for infinite

Returns:
    True if signaled, False if timeout

Member Data Documentation

◆ _count

hermes.backplane.sync.FrameBarrier._count = count
protected

◆ _done_sem

posix_ipc.Semaphore | None hermes.backplane.sync.FrameBarrier._done_sem = None
protected

◆ _name

str hermes.backplane.sync.FrameBarrier._name = name
protected

◆ _step_sem

posix_ipc.Semaphore | None hermes.backplane.sync.FrameBarrier._step_sem = None
protected

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