Description
Bounds concurrent work without owning or creating tasks.
A Gate admits at most Capacity holders. Waiting on Acquire uses ordinary Ada protected-entry semantics, so lightweight tasks suspend cooperatively while native tasks block through GNARL. Shutdown is terminal: it rejects new acquisitions, releases queued callers, and permits existing holders to drain.
Acquire_Result
type Acquire_Result is
(Permit_Acquired, Gate_Full, Gate_Closed, Acquire_Timed_Out);
Result of a nonblocking or timed acquisition.
Enumeration literals
- Permit_Acquired
One permit is now held by the caller
- Gate_Full
A nonblocking attempt found no capacity
- Gate_Closed
Shutdown rejected the acquisition
- Acquire_Timed_Out
A timed attempt reached its deadline
Timed_Acquire
procedure Timed_Acquire
(Item : in out Gate;
Timeout : Duration;
Result : out Acquire_Result)
Acquire within one relative deadline. Negative Timeout waits indefinitely and zero is an immediate attempt. Once the protected entry is accepted, acquisition wins over a simultaneous deadline.
Parameters
- Item
Gate from which to acquire one permit
- Timeout
Deadline interval in seconds
- Result
Permit_Acquired, Gate_Closed, or Acquire_Timed_Out