tiny.simd.SpinUMonitor
Defined in thread.spin.
API (3)
Actions
Public operations.
Source
Source: lib/simd/src/thread/spin.zig:106
zig
pub const SpinUMonitor = struct { pub fn spinType(_: SpinUMonitor) SpinType { return .u_monitor; } pub fn untilDifferent( _: SpinUMonitor, previous: u32, watched: *const std.atomic.Value(u32), ) SpinResult { if (comptime !haveUMonitor()) { return (SpinPause{}).untilDifferent(previous, watched); } var repetitions: u32 = 0; while (true) : (repetitions +%= 1) { var current = watched.load(.acquire); if (current != previous) { return .{ .value = current, .repetitions = repetitions, }; } uMonitor(&watched.raw); current = watched.load(.acquire); if (current != previous) { return .{ .value = current, .repetitions = repetitions, }; } uWait(); } } pub fn untilEqual( _: SpinUMonitor, expected: u32, watched: *const std.atomic.Value(u32), ) usize { if (comptime !haveUMonitor()) { return (SpinPause{}).untilEqual(expected, watched); } var repetitions: usize = 0; while (true) : (repetitions +%= 1) { var current = watched.load(.acquire); if (current == expected) return repetitions; uMonitor(&watched.raw); current = watched.load(.acquire); if (current == expected) return repetitions; uWait(); } }};Source: lib/simd/src/root.zig:123
zig
pub const SpinUMonitor = thread.SpinUMonitor;Also reachable as
Audit
| Definitions | 4 |
|---|---|
| Public names | 12 |
| Members | 0 |
| Version | 26.7.0 |
| Revision | daab053ee433 |