Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › Io › Condition › deregister Private Function deregister Doc Source Private Function std.Io.Condition.deregister
fn deregister (cond : *Condition , io : Io ) void Params File Io.zig: 1902
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918 fn deregister (cond : *Condition , io : Io ) void {
var prev_state = cond .state .load (.monotonic );
while (true ) {
const new_signals = @min (prev_state .signals , prev_state .waiters - 1 );
prev_state = cond .state .cmpxchgWeak (prev_state , .{
.waiters = prev_state .waiters - 1 ,
.signals = new_signals ,
}, .monotonic , .monotonic ) orelse {
if (prev_state .signals > 0 and prev_state .signals < prev_state .waiters ) {
// We kept a signal we are not consuming; wake a remaining waiter for it.
_ = cond .epoch .fetchAdd (1 , .release );
io .futexWake (u32 , &cond .epoch .raw , 1 );
}
return ;
};
}
}