Something went wrong. Try again.
fork of gitlab.com/devnw/zig/thread-pool for zig 0.17
Something went wrong. Try again.
1.1 kB · 40 lines
Zig
at main
1234567891011121314151617181920212223242526272829303132333435363738394041const std = @import("std");const thread_pool = @import("thread_pool");
const Counter = struct { value: std.atomic.Value(u64) = std.atomic.Value(u64).init(0),};
fn counterTask(raw_ctx: *anyopaque, runtime: *thread_pool.TaskContext) void { _ = runtime; const counter: *Counter = @ptrCast(@alignCast(raw_ctx)); _ = counter.value.fetchAdd(1, .monotonic);}
pub fn main() !void { var gpa: std.heap.DebugAllocator(.{}) = .init; defer _ = gpa.deinit(); const allocator = gpa.allocator();
var pool = try thread_pool.ThreadPool.init(allocator, .{ .min_threads = 2, .max_threads = 2, .queue_capacity = 128, .local_queue_capacity = 32, .scheduler_variant = .work_stealing, }); defer pool.deinit();
var wg = pool.waitGroup(); var counter = Counter{}; for (0..32) |_| { _ = try pool.submit(counterTask, @ptrCast(&counter), .{ .wait_group = &wg }); } wg.wait();
const stats = pool.statsSnapshot(); std.debug.print("completed={d} count={d}\n", .{ stats.completed, counter.value.load(.acquire), });}