std.Thread: don't spin

This commit is contained in:
Andrew Kelley 2025-07-20 10:52:04 -07:00
parent e4abdf5a13
commit f97c91ddb5

View file

@ -911,18 +911,9 @@ const WasiThreadImpl = struct {
allocator.free(self.thread.memory);
}
var spin: u8 = 10;
while (true) {
const tid = self.thread.tid.load(.seq_cst);
if (tid == 0) {
break;
}
if (spin > 0) {
spin -= 1;
std.atomic.spinLoopHint();
continue;
}
if (tid == 0) break;
const result = asm (
\\ local.get %[ptr]
@ -1514,18 +1505,9 @@ const LinuxThreadImpl = struct {
fn join(self: Impl) void {
defer posix.munmap(self.thread.mapped);
var spin: u8 = 10;
while (true) {
const tid = self.thread.child_tid.load(.seq_cst);
if (tid == 0) {
break;
}
if (spin > 0) {
spin -= 1;
std.atomic.spinLoopHint();
continue;
}
if (tid == 0) break;
switch (linux.E.init(linux.futex_4arg(
&self.thread.child_tid.raw,
@ -1616,7 +1598,6 @@ test "setName, getName" {
}
test {
// Doesn't use testing.refAllDecls() since that would pull in the compileError spinLoopHint.
_ = Futex;
_ = ResetEvent;
_ = Mutex;