Zig Cookbook

介绍

运行一次

std.once 确保一个函数只执行一次,无论有多少个线程尝试调用它或它被调用多少次。这种线程安全的初始化对于单例模式和一次性设置操作特别有用。

const std = @import("std");

var n: u8 = 0;

fn incr() void {
    n = n + 1;
}

var once_incr = std.once(incr);

fn onceIncr() void {
    // The invocations of `call` are thread-safe.
    once_incr.call();
    once_incr.call();
}

pub fn main() !void {
    {
        const t1 = try std.Thread.spawn(.{}, onceIncr, .{});
        defer t1.join();
        const t2 = try std.Thread.spawn(.{}, onceIncr, .{});
        defer t2.join();
    }

    try std.testing.expectEqual(1, n);
}

上一示例:线程池
下一示例:检查逻辑 CPU 核心数