timedWait
Function parameters
Parameters
- sem:*Semaphore
- timeout_ns:u64
Functions in this namespace
Functions
Source
Implementation
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();
}