pub fn tryLockShared(rl: *RwLock, io: Io) bool
rl: *RwLock
io: Io
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
pub fn tryLockShared(rl: *RwLock, io: Io) bool { const state = @atomicLoad(usize, &rl.state, .seq_cst); if (state & (is_writing | writer_mask) == 0) { _ = @cmpxchgStrong( usize, &rl.state, state, state + reader, .seq_cst, .seq_cst, ) orelse return true; } if (rl.mutex.tryLock()) { _ = @atomicRmw(usize, &rl.state, .Add, reader, .seq_cst); rl.mutex.unlock(io); return true; } return false; }