【ZIG】使用线程池

const std = @import("std");
const thread = std.Thread;

// Sigmoid函数
fn sigmoid(x: f64) f64 {
    return 1 / (1 + std.math.pow(f64, std.math.e, -x));
}

fn work(i: usize) void {
    std.debug.print("result = {d}, thread id = {any}\n", .{ i * i, thread.getCurrentId() });
}

fn thread_pool() !void {
    // Thread Pool
    // 创建内存分配器
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();

    const allocator = gpa.allocator();

    // 创建线程池
    // 这里默认没有指定线程池中线程的数量,它会自动获取CPU核数量,并且与1进行比较,选取较大的数作为线程数
    var pool: thread.Pool = undefined;
    try pool.init(.{ .allocator = allocator });
    defer pool.deinit();

    // 获取CPU核数量
    // const cpus = try thread.getCpuCount();

    // 往线程池中推送任务
    for (0..128) |i| {
        try pool.spawn(work, .{i});
    }
}

pub fn main() !void {
    try thread_pool();
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值