Function timedWait [src]

Prototype

pub fn timedWait(sem: *Semaphore, timeout_ns: u64) error{Timeout}!void

Parameters

sem: *Semaphoretimeout_ns: u64

Possible Errors

Timeout

Example

test timedWait { var sem = Semaphore{}; try testing.expectEqual(0, sem.permits); try testing.expectError(error.Timeout, sem.timedWait(1)); sem.post(); try testing.expectEqual(1, sem.permits); try sem.timedWait(1); try testing.expectEqual(0, sem.permits); }

Source

pub fn timedWait(sem: *Semaphore, timeout_ns: u64) error{Timeout}!void { var timeout_timer = std.time.Timer.start() catch unreachable; sem.mutex.lock(); defer sem.mutex.unlock(); while (sem.permits == 0) { const elapsed = timeout_timer.read(); if (elapsed > timeout_ns) return error.Timeout; const local_timeout_ns = timeout_ns - elapsed; try sem.cond.timedWait(&sem.mutex, local_timeout_ns); } sem.permits -= 1; if (sem.permits > 0) sem.cond.signal(); }