diff options
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/Thread/AutoResetEvent.zig | 8 | ||||
| -rw-r--r-- | lib/std/Thread/Futex.zig | 60 | ||||
| -rw-r--r-- | lib/std/Thread/Mutex.zig | 6 | ||||
| -rw-r--r-- | lib/std/Thread/ResetEvent.zig | 8 | ||||
| -rw-r--r-- | lib/std/Thread/StaticResetEvent.zig | 8 | ||||
| -rw-r--r-- | lib/std/atomic/queue.zig | 12 | ||||
| -rw-r--r-- | lib/std/atomic/stack.zig | 12 | ||||
| -rw-r--r-- | lib/std/debug.zig | 4 | ||||
| -rw-r--r-- | lib/std/event/loop.zig | 30 | ||||
| -rw-r--r-- | lib/std/fs/test.zig | 11 | ||||
| -rw-r--r-- | lib/std/net/test.zig | 10 | ||||
| -rw-r--r-- | lib/std/once.zig | 8 | ||||
| -rw-r--r-- | lib/std/os/test.zig | 36 | ||||
| -rw-r--r-- | lib/std/target.zig | 23 |
14 files changed, 118 insertions, 118 deletions
diff --git a/lib/std/Thread/AutoResetEvent.zig b/lib/std/Thread/AutoResetEvent.zig index 7372a8d8d9..13e404d602 100644 --- a/lib/std/Thread/AutoResetEvent.zig +++ b/lib/std/Thread/AutoResetEvent.zig @@ -220,9 +220,9 @@ test "basic usage" { }; var context = Context{}; - const send_thread = try std.Thread.spawn(Context.sender, &context); - const recv_thread = try std.Thread.spawn(Context.receiver, &context); + const send_thread = try std.Thread.spawn(.{}, Context.sender, .{&context}); + const recv_thread = try std.Thread.spawn(.{}, Context.receiver, .{&context}); - send_thread.wait(); - recv_thread.wait(); + send_thread.join(); + recv_thread.join(); } diff --git a/lib/std/Thread/Futex.zig b/lib/std/Thread/Futex.zig index 356a4e2046..4153f7b7c0 100644 --- a/lib/std/Thread/Futex.zig +++ b/lib/std/Thread/Futex.zig @@ -413,32 +413,27 @@ test "Futex - Signal" { } } - const Thread = struct { - tx: *Self, - rx: *Self, + const start_value = 1; - const start_value = 1; - - fn run(self: Thread) void { - var iterations: u32 = start_value; - while (iterations < 10) : (iterations += 1) { - self.rx.recv(iterations); - self.tx.send(iterations); - } + fn runThread(rx: *Self, tx: *Self) void { + var iterations: u32 = start_value; + while (iterations < 10) : (iterations += 1) { + self.rx.recv(iterations); + self.tx.send(iterations); } - }; + } fn run() !void { var ping = Self{}; var pong = Self{}; - const t1 = try std.Thread.spawn(Thread.run, .{ .rx = &ping, .tx = &pong }); - defer t1.wait(); + const t1 = try std.Thread.spawn(.{}, runThread, .{ &ping, &pong }); + defer t1.join(); - const t2 = try std.Thread.spawn(Thread.run, .{ .rx = &pong, .tx = &ping }); - defer t2.wait(); + const t2 = try std.Thread.spawn(.{}, runThread, .{ &pong, &ping }); + defer t2.join(); - ping.send(Thread.start_value); + ping.send(start_value); } }).run(); } @@ -507,7 +502,7 @@ test "Futex - Chain" { try (struct { completed: Signal = .{}, threads: [10]struct { - thread: *std.Thread, + thread: std.Thread, signal: Signal, } = undefined, @@ -531,39 +526,32 @@ test "Futex - Chain" { }; const Self = @This(); - const Chain = struct { - self: *Self, - index: usize, - fn run(chain: Chain) void { - const this_signal = &chain.self.threads[chain.index].signal; + fn runThread(self: *Self, index: usize) void { + const this_signal = &chain.self.threads[chain.index].signal; - var next_signal = &chain.self.completed; - if (chain.index + 1 < chain.self.threads.len) { - next_signal = &chain.self.threads[chain.index + 1].signal; - } - - this_signal.wait(); - next_signal.notify(); + var next_signal = &chain.self.completed; + if (chain.index + 1 < chain.self.threads.len) { + next_signal = &chain.self.threads[chain.index + 1].signal; } - }; + + this_signal.wait(); + next_signal.notify(); + } fn run() !void { var self = Self{}; for (self.threads) |*entry, index| { entry.signal = .{}; - entry.thread = try std.Thread.spawn(Chain.run, .{ - .self = &self, - .index = index, - }); + entry.thread = try std.Thread.spawn(.{}, runThread .{&self, index}); } self.threads[0].signal.notify(); self.completed.wait(); for (self.threads) |entry| { - entry.thread.wait(); + entry.thread.join(); } } }).run(); diff --git a/lib/std/Thread/Mutex.zig b/lib/std/Thread/Mutex.zig index 49f138079d..35095b2a3c 100644 --- a/lib/std/Thread/Mutex.zig +++ b/lib/std/Thread/Mutex.zig @@ -297,12 +297,12 @@ test "basic usage" { try testing.expect(context.data == TestContext.incr_count); } else { const thread_count = 10; - var threads: [thread_count]*std.Thread = undefined; + var threads: [thread_count]std.Thread = undefined; for (threads) |*t| { - t.* = try std.Thread.spawn(worker, &context); + t.* = try std.Thread.spawn(.{}, worker, .{&context}); } for (threads) |t| - t.wait(); + t.join(); try testing.expect(context.data == thread_count * TestContext.incr_count); } diff --git a/lib/std/Thread/ResetEvent.zig b/lib/std/Thread/ResetEvent.zig index f161b46aa0..356b8eb78d 100644 --- a/lib/std/Thread/ResetEvent.zig +++ b/lib/std/Thread/ResetEvent.zig @@ -281,8 +281,8 @@ test "basic usage" { var context: Context = undefined; try context.init(); defer context.deinit(); - const receiver = try std.Thread.spawn(Context.receiver, &context); - defer receiver.wait(); + const receiver = try std.Thread.spawn(.{}, Context.receiver, .{&context}); + defer receiver.join(); try context.sender(); if (false) { @@ -290,8 +290,8 @@ test "basic usage" { // https://github.com/ziglang/zig/issues/7009 var timed = Context.init(); defer timed.deinit(); - const sleeper = try std.Thread.spawn(Context.sleeper, &timed); - defer sleeper.wait(); + const sleeper = try std.Thread.spawn(.{}, Context.sleeper, .{&timed}); + defer sleeper.join(); try timed.timedWaiter(); } } diff --git a/lib/std/Thread/StaticResetEvent.zig b/lib/std/Thread/StaticResetEvent.zig index 6f869e0d89..40974938d0 100644 --- a/lib/std/Thread/StaticResetEvent.zig +++ b/lib/std/Thread/StaticResetEvent.zig @@ -384,8 +384,8 @@ test "basic usage" { }; var context = Context{}; - const receiver = try std.Thread.spawn(Context.receiver, &context); - defer receiver.wait(); + const receiver = try std.Thread.spawn(.{}, Context.receiver, .{&context}); + defer receiver.join(); try context.sender(); if (false) { @@ -393,8 +393,8 @@ test "basic usage" { // https://github.com/ziglang/zig/issues/7009 var timed = Context.init(); defer timed.deinit(); - const sleeper = try std.Thread.spawn(Context.sleeper, &timed); - defer sleeper.wait(); + const sleeper = try std.Thread.spawn(.{}, Context.sleeper, .{&timed}); + defer sleeper.join(); try timed.timedWaiter(); } } diff --git a/lib/std/atomic/queue.zig b/lib/std/atomic/queue.zig index cc5b20488b..cee431951c 100644 --- a/lib/std/atomic/queue.zig +++ b/lib/std/atomic/queue.zig @@ -214,20 +214,20 @@ test "std.atomic.Queue" { } else { try expect(context.queue.isEmpty()); - var putters: [put_thread_count]*std.Thread = undefined; + var putters: [put_thread_count]std.Thread = undefined; for (putters) |*t| { - t.* = try std.Thread.spawn(startPuts, &context); + t.* = try std.Thread.spawn(.{}, startPuts, .{&context}); } - var getters: [put_thread_count]*std.Thread = undefined; + var getters: [put_thread_count]std.Thread = undefined; for (getters) |*t| { - t.* = try std.Thread.spawn(startGets, &context); + t.* = try std.Thread.spawn(.{}, startGets, .{&context}); } for (putters) |t| - t.wait(); + t.join(); @atomicStore(bool, &context.puts_done, true, .SeqCst); for (getters) |t| - t.wait(); + t.join(); try expect(context.queue.isEmpty()); } diff --git a/lib/std/atomic/stack.zig b/lib/std/atomic/stack.zig index 9472df7347..cfdf40fa60 100644 --- a/lib/std/atomic/stack.zig +++ b/lib/std/atomic/stack.zig @@ -121,20 +121,20 @@ test "std.atomic.stack" { } } } else { - var putters: [put_thread_count]*std.Thread = undefined; + var putters: [put_thread_count]std.Thread = undefined; for (putters) |*t| { - t.* = try std.Thread.spawn(startPuts, &context); + t.* = try std.Thread.spawn(.{}, startPuts, .{&context}); } - var getters: [put_thread_count]*std.Thread = undefined; + var getters: [put_thread_count]std.Thread = undefined; for (getters) |*t| { - t.* = try std.Thread.spawn(startGets, &context); + t.* = try std.Thread.spawn(.{}, startGets, .{&context}); } for (putters) |t| - t.wait(); + t.join(); @atomicStore(bool, &context.puts_done, true, .SeqCst); for (getters) |t| - t.wait(); + t.join(); } if (context.put_sum != context.get_sum) { diff --git a/lib/std/debug.zig b/lib/std/debug.zig index fa87e5898c..57445d3cb1 100644 --- a/lib/std/debug.zig +++ b/lib/std/debug.zig @@ -273,8 +273,8 @@ pub fn panicExtra(trace: ?*const builtin.StackTrace, first_trace_addr: ?usize, c if (builtin.single_threaded) { stderr.print("panic: ", .{}) catch os.abort(); } else { - const current_thread_id = std.Thread.getCurrentThreadId(); - stderr.print("thread {d} panic: ", .{current_thread_id}) catch os.abort(); + const current_thread_id = std.Thread.getCurrentId(); + stderr.print("thread {} panic: ", .{current_thread_id}) catch os.abort(); } stderr.print(format ++ "\n", args) catch os.abort(); if (trace) |t| { diff --git a/lib/std/event/loop.zig b/lib/std/event/loop.zig index 5353341363..87d84acba6 100644 --- a/lib/std/event/loop.zig +++ b/lib/std/event/loop.zig @@ -21,12 +21,12 @@ pub const Loop = struct { os_data: OsData, final_resume_node: ResumeNode, pending_event_count: usize, - extra_threads: []*Thread, + extra_threads: []Thread, /// TODO change this to a pool of configurable number of threads /// and rename it to be not file-system-specific. it will become /// a thread pool for turning non-CPU-bound blocking things into /// async things. A fallback for any missing OS-specific API. - fs_thread: *Thread, + fs_thread: Thread, fs_queue: std.atomic.Queue(Request), fs_end_request: Request.Node, fs_thread_wakeup: std.Thread.ResetEvent, @@ -189,11 +189,11 @@ pub const Loop = struct { errdefer self.deinitOsData(); if (!builtin.single_threaded) { - self.fs_thread = try Thread.spawn(posixFsRun, self); + self.fs_thread = try Thread.spawn(.{}, posixFsRun, .{self}); } errdefer if (!builtin.single_threaded) { self.posixFsRequest(&self.fs_end_request); - self.fs_thread.wait(); + self.fs_thread.join(); }; if (!std.builtin.single_threaded) @@ -264,11 +264,11 @@ pub const Loop = struct { assert(amt == wakeup_bytes.len); while (extra_thread_index != 0) { extra_thread_index -= 1; - self.extra_threads[extra_thread_index].wait(); + self.extra_threads[extra_thread_index].join(); } } while (extra_thread_index < extra_thread_count) : (extra_thread_index += 1) { - self.extra_threads[extra_thread_index] = try Thread.spawn(workerRun, self); + self.extra_threads[extra_thread_index] = try Thread.spawn(.{}, workerRun, .{self}); } }, .macos, .freebsd, .netbsd, .dragonfly, .openbsd => { @@ -329,11 +329,11 @@ pub const Loop = struct { _ = os.kevent(self.os_data.kqfd, final_kev_arr, empty_kevs, null) catch unreachable; while (extra_thread_index != 0) { extra_thread_index -= 1; - self.extra_threads[extra_thread_index].wait(); + self.extra_threads[extra_thread_index].join(); } } while (extra_thread_index < extra_thread_count) : (extra_thread_index += 1) { - self.extra_threads[extra_thread_index] = try Thread.spawn(workerRun, self); + self.extra_threads[extra_thread_index] = try Thread.spawn(.{}, workerRun, .{self}); } }, .windows => { @@ -378,11 +378,11 @@ pub const Loop = struct { } while (extra_thread_index != 0) { extra_thread_index -= 1; - self.extra_threads[extra_thread_index].wait(); + self.extra_threads[extra_thread_index].join(); } } while (extra_thread_index < extra_thread_count) : (extra_thread_index += 1) { - self.extra_threads[extra_thread_index] = try Thread.spawn(workerRun, self); + self.extra_threads[extra_thread_index] = try Thread.spawn(.{}, workerRun, .{self}); } }, else => {}, @@ -651,18 +651,18 @@ pub const Loop = struct { .netbsd, .dragonfly, .openbsd, - => self.fs_thread.wait(), + => self.fs_thread.join(), else => {}, } } for (self.extra_threads) |extra_thread| { - extra_thread.wait(); + extra_thread.join(); } @atomicStore(bool, &self.delay_queue.is_running, false, .SeqCst); self.delay_queue.event.set(); - self.delay_queue.thread.wait(); + self.delay_queue.thread.join(); } /// Runs the provided function asynchronously. The function's frame is allocated @@ -787,7 +787,7 @@ pub const Loop = struct { const DelayQueue = struct { timer: std.time.Timer, waiters: Waiters, - thread: *std.Thread, + thread: std.Thread, event: std.Thread.AutoResetEvent, is_running: bool, @@ -802,7 +802,7 @@ pub const Loop = struct { .event = std.Thread.AutoResetEvent{}, .is_running = true, // Must be last so that it can read the other state, such as `is_running`. - .thread = try std.Thread.spawn(DelayQueue.run, self), + .thread = try std.Thread.spawn(.{}, DelayQueue.run, .{self}), }; } diff --git a/lib/std/fs/test.zig b/lib/std/fs/test.zig index 3c7a95432c..9464959cdb 100644 --- a/lib/std/fs/test.zig +++ b/lib/std/fs/test.zig @@ -862,11 +862,10 @@ test "open file with exclusive lock twice, make sure it waits" { errdefer file.close(); const S = struct { - const C = struct { dir: *fs.Dir, evt: *std.Thread.ResetEvent }; - fn checkFn(ctx: C) !void { - const file1 = try ctx.dir.createFile(filename, .{ .lock = .Exclusive }); + fn checkFn(dir: *fs.Dir, evt: *std.Thread.ResetEvent) !void { + const file1 = try dir.createFile(filename, .{ .lock = .Exclusive }); defer file1.close(); - ctx.evt.set(); + evt.set(); } }; @@ -874,8 +873,8 @@ test "open file with exclusive lock twice, make sure it waits" { try evt.init(); defer evt.deinit(); - const t = try std.Thread.spawn(S.checkFn, S.C{ .dir = &tmp.dir, .evt = &evt }); - defer t.wait(); + const t = try std.Thread.spawn(.{}, S.checkFn, .{ &tmp.dir, &evt }); + defer t.join(); const SLEEP_TIMEOUT_NS = 10 * std.time.ns_per_ms; // Make sure we've slept enough. diff --git a/lib/std/net/test.zig b/lib/std/net/test.zig index c2596b733c..08722c9e31 100644 --- a/lib/std/net/test.zig +++ b/lib/std/net/test.zig @@ -161,8 +161,8 @@ test "listen on a port, send bytes, receive bytes" { } }; - const t = try std.Thread.spawn(S.clientFn, server.listen_address); - defer t.wait(); + const t = try std.Thread.spawn(.{}, S.clientFn, .{server.listen_address}); + defer t.join(); var client = try server.accept(); defer client.stream.close(); @@ -277,7 +277,7 @@ test "listen on a unix socket, send bytes, receive bytes" { try server.listen(socket_addr); const S = struct { - fn clientFn(_: void) !void { + fn clientFn() !void { const socket = try net.connectUnixSocket(socket_path); defer socket.close(); @@ -285,8 +285,8 @@ test "listen on a unix socket, send bytes, receive bytes" { } }; - const t = try std.Thread.spawn(S.clientFn, {}); - defer t.wait(); + const t = try std.Thread.spawn(.{}, S.clientFn, .{}); + defer t.join(); var client = try server.accept(); defer client.stream.close(); diff --git a/lib/std/once.zig b/lib/std/once.zig index 05f003c796..a557f4aac9 100644 --- a/lib/std/once.zig +++ b/lib/std/once.zig @@ -55,16 +55,16 @@ test "Once executes its function just once" { global_once.call(); global_once.call(); } else { - var threads: [10]*std.Thread = undefined; - defer for (threads) |handle| handle.wait(); + var threads: [10]std.Thread = undefined; + defer for (threads) |handle| handle.join(); for (threads) |*handle| { - handle.* = try std.Thread.spawn(struct { + handle.* = try std.Thread.spawn(.{}, struct { fn thread_fn(x: u8) void { _ = x; global_once.call(); } - }.thread_fn, 0); + }.thread_fn, .{0}); } } diff --git a/lib/std/os/test.zig b/lib/std/os/test.zig index 7a88ecd7ca..0bfe29d64b 100644 --- a/lib/std/os/test.zig +++ b/lib/std/os/test.zig @@ -320,9 +320,9 @@ test "std.Thread.getCurrentId" { if (builtin.single_threaded) return error.SkipZigTest; var thread_current_id: Thread.Id = undefined; - const thread = try Thread.spawn(testThreadIdFn, &thread_current_id); - const thread_id = thread.handle(); - thread.wait(); + const thread = try Thread.spawn(.{}, testThreadIdFn, .{&thread_current_id}); + const thread_id = thread.getHandle(); + thread.join(); if (Thread.use_pthreads) { try expect(thread_current_id == thread_id); } else if (native_os == .windows) { @@ -339,21 +339,20 @@ test "spawn threads" { var shared_ctx: i32 = 1; - const thread1 = try Thread.spawn(start1, {}); - const thread2 = try Thread.spawn(start2, &shared_ctx); - const thread3 = try Thread.spawn(start2, &shared_ctx); - const thread4 = try Thread.spawn(start2, &shared_ctx); + const thread1 = try Thread.spawn(.{}, start1, .{}); + const thread2 = try Thread.spawn(.{}, start2, .{&shared_ctx}); + const thread3 = try Thread.spawn(.{}, start2, .{&shared_ctx}); + const thread4 = try Thread.spawn(.{}, start2, .{&shared_ctx}); - thread1.wait(); - thread2.wait(); - thread3.wait(); - thread4.wait(); + thread1.join(); + thread2.join(); + thread3.join(); + thread4.join(); try expect(shared_ctx == 4); } -fn start1(ctx: void) u8 { - _ = ctx; +fn start1() u8 { return 0; } @@ -371,16 +370,15 @@ test "cpu count" { test "thread local storage" { if (builtin.single_threaded) return error.SkipZigTest; - const thread1 = try Thread.spawn(testTls, {}); - const thread2 = try Thread.spawn(testTls, {}); + const thread1 = try Thread.spawn(.{}, testTls, .{}); + const thread2 = try Thread.spawn(.{}, testTls, .{}); try testTls({}); - thread1.wait(); - thread2.wait(); + thread1.join(); + thread2.join(); } threadlocal var x: i32 = 1234; -fn testTls(context: void) !void { - _ = context; +fn testTls() !void { if (x != 1234) return error.TlsBadStartValue; x += 1; if (x != 1235) return error.TlsBadEndValue; diff --git a/lib/std/target.zig b/lib/std/target.zig index 02ce44d477..507f30c2e0 100644 --- a/lib/std/target.zig +++ b/lib/std/target.zig @@ -69,6 +69,13 @@ pub const Target = struct { }; } + pub fn isBSD(tag: Tag) bool { + return tag.isDarwin() or switch (tag) { + .kfreebsd, .freebsd, .openbsd, .netbsd, .dragonfly => true, + else => false, + }; + } + pub fn dynamicLibSuffix(tag: Tag) [:0]const u8 { if (tag.isDarwin()) { return ".dylib"; @@ -787,6 +794,13 @@ pub const Target = struct { }; } + pub fn isAARCH64(arch: Arch) bool { + return switch (arch) { + .aarch64, .aarch64_be, .aarch64_32 => true, + else => false, + }; + } + pub fn isThumb(arch: Arch) bool { return switch (arch) { .thumb, .thumbeb => true, @@ -1365,10 +1379,7 @@ pub const Target = struct { } pub fn isAndroid(self: Target) bool { - return switch (self.abi) { - .android => true, - else => false, - }; + return self.abi == .android; } pub fn isWasm(self: Target) bool { @@ -1379,6 +1390,10 @@ pub const Target = struct { return self.os.tag.isDarwin(); } + pub fn isBSD(self: Target) bool { + return self.os.tag.isBSD(); + } + pub fn isGnuLibC_os_tag_abi(os_tag: Os.Tag, abi: Abi) bool { return os_tag == .linux and abi.isGnu(); } |
