mirror of
https://github.com/ziglang/zig.git
synced 2024-11-15 08:33:06 +00:00
std: rename sched_yield
to yield
and move it to std.Thread
This commit is contained in:
parent
104a8840db
commit
139b731d82
@ -350,6 +350,26 @@ pub fn join(self: Thread) void {
|
||||
return self.impl.join();
|
||||
}
|
||||
|
||||
pub const YieldError = error{
|
||||
/// The system is not configured to allow yielding
|
||||
SystemCannotYield,
|
||||
};
|
||||
|
||||
/// Yields the current thread potentially allowing other threads to run.
|
||||
pub fn yield() YieldError!void {
|
||||
if (builtin.os.tag == .windows) {
|
||||
// The return value has to do with how many other threads there are; it is not
|
||||
// an error condition on Windows.
|
||||
_ = os.windows.kernel32.SwitchToThread();
|
||||
return;
|
||||
}
|
||||
switch (os.errno(os.system.sched_yield())) {
|
||||
.SUCCESS => return,
|
||||
.NOSYS => return error.SystemCannotYield,
|
||||
else => return error.SystemCannotYield,
|
||||
}
|
||||
}
|
||||
|
||||
/// State to synchronize detachment of spawner thread to spawned thread
|
||||
const Completion = Atomic(enum(u8) {
|
||||
running,
|
||||
|
@ -181,7 +181,7 @@ pub const AtomicEvent = struct {
|
||||
timer = time.Timer.start() catch return error.TimedOut;
|
||||
|
||||
while (@atomicLoad(u32, waiters, .Acquire) != WAKE) {
|
||||
std.os.sched_yield() catch std.atomic.spinLoopHint();
|
||||
std.Thread.yield() catch std.atomic.spinLoopHint();
|
||||
if (timeout) |timeout_ns| {
|
||||
if (timer.read() >= timeout_ns)
|
||||
return error.TimedOut;
|
||||
@ -293,7 +293,7 @@ pub const AtomicEvent = struct {
|
||||
return @intToPtr(?windows.HANDLE, handle);
|
||||
},
|
||||
LOADING => {
|
||||
std.os.sched_yield() catch std.atomic.spinLoopHint();
|
||||
std.Thread.yield() catch std.atomic.spinLoopHint();
|
||||
handle = @atomicLoad(usize, &event_handle, .Monotonic);
|
||||
},
|
||||
else => {
|
||||
|
@ -6067,25 +6067,6 @@ pub fn dn_expand(
|
||||
return error.InvalidDnsPacket;
|
||||
}
|
||||
|
||||
pub const SchedYieldError = error{
|
||||
/// The system is not configured to allow yielding
|
||||
SystemCannotYield,
|
||||
};
|
||||
|
||||
pub fn sched_yield() SchedYieldError!void {
|
||||
if (builtin.os.tag == .windows) {
|
||||
// The return value has to do with how many other threads there are; it is not
|
||||
// an error condition on Windows.
|
||||
_ = windows.kernel32.SwitchToThread();
|
||||
return;
|
||||
}
|
||||
switch (errno(system.sched_yield())) {
|
||||
.SUCCESS => return,
|
||||
.NOSYS => return error.SystemCannotYield,
|
||||
else => return error.SystemCannotYield,
|
||||
}
|
||||
}
|
||||
|
||||
pub const SetSockOptError = error{
|
||||
/// The socket is already connected, and a specified option cannot be set while the socket is connected.
|
||||
AlreadyConnected,
|
||||
|
Loading…
Reference in New Issue
Block a user