zigar.thread.WorkQueue(ns).deinitAsync(self, promise) - chung-leong/zigar GitHub Wiki

Shutdown the work queue, terminating worker threads and freeing memory used. Resolve the given promise when the process is complete.

Usage

const std = @import("std");
const zigar = @import("zigar");

var work_queue: zigar.thread.WorkQueue(ns) = .{};
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const allocator = gpa.allocator();

pub fn startup(num_threads: usize) !void {
    try work_queue.init(.{
        .allocator = allocator,
        .n_jobs = num_threads,
        .thread_start_params = .{ allocator, 1234, "Rats live on no evil star" },
        .thread_end_params = .{allocator},
    });
}

pub fn shutdown(promise: zigar.function.Promise(void)) !void {
    work_queue.deinitAsync(promise);
}

pub fn print(promise: zigar.function.PromiseOf(ns.print)) !void {
    try work_queue.push(ns.print, .{}, promise);
}

const ns = struct {
    threadlocal var text: []const u8 = undefined;

    pub fn onThreadStart(a: std.mem.Allocator, number: i32, string: []const u8) !void {
        text = try std.fmt.allocPrint(a, "number = {d}, string = {s}", .{ number, string });
    }

    pub fn onThreadEnd(a: std.mem.Allocator) void {
        a.free(text);
    }

    pub fn print() void {
        std.debug.print("{s}\n", .{text});
    }
};
import { print, startup, shutdown } from './work-queue-example-3.zig';

startup(4);
await print();
await shutdown();
number = 1234, string = Rats live on no evil star

Arguments:

  • self: @This()
  • promise: ?Promise(void)

Return value:

void


WorkQueue(ns) | Promise(T)