运行一次
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);
}