pub fn waitTimeout(s: *Semaphore, io: Io, timeout: Io.Timeout) WaitTimeoutError!void 38
39
40
41
42
43
44
45pub fn waitTimeout(s: *Semaphore, io: Io, timeout: Io.Timeout) WaitTimeoutError!void {
const deadline = timeout.toDeadline(io);
try s.mutex.lock(io);
defer s.mutex.unlock(io);
while (s.permits == 0) try s.cond.waitTimeout(io, &s.mutex, deadline);
s.permits -= 1;
if (s.permits > 0) s.cond.signal(io);
}
Blocks until a
permitis available and consumes a single one. Unblocks without consuming apermitwhen canceled or when the provided timeout expires before apermitis available.See also:
waitwaitUncancelable