From 09762e88aea2d5280dcee29e8f2e3233ad397d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gr=C3=A9goire?= Date: Sat, 24 Oct 2026 22:12:44 -0400 Subject: [PATCH] ke/mutex: add try_acquire --- src/sys/kern/mutex.zig | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/sys/kern/mutex.zig b/src/sys/kern/mutex.zig index 7df543e..63db513 100644 --- a/src/sys/kern/mutex.zig +++ b/src/sys/kern/mutex.zig @@ -58,10 +58,24 @@ pub const Mutex = struct { return .{ .state = std.atomic.Value(State).init(.{}) }; } + /// Return whether the lock is currently held. pub fn is_locked(self: *Mutex) bool { return self.state.load(.monotonic) != State.uncontended; } + /// Try to acquire the lock. + /// Returns true on success. + pub fn try_acquire(self: *Mutex) bool { + const curtd = ke.thread.current(); + return self.state.cmpxchgStrong( + State.uncontended, + State.from(curtd), + .acquire, + .monotonic, + ) == null; + } + + /// Acquire the lock. pub inline fn acquire(m: *Mutex) void { const curtd = ke.thread.current(); @@ -207,6 +221,7 @@ pub const Mutex = struct { } } + /// Release the lock. pub inline fn release(m: *Mutex) void { const old = m.state.swap(State.uncontended, .release);