rust中常用方法记录(逐渐更新)

文章介绍了Rust中的sleep函数使用,空间预取器优化,以及Cell和WaitGroup等并发控制结构在多线程程序中的应用,展示了如何实现类似Go语言的WaitGroup功能。
摘要由CSDN通过智能技术生成

sleep等待x秒

use std::thread::sleep;
use std::time::Duration;

fn main() {
    println!("waiting.....");
    sleep(Duration::from_secs(5)); // 暂停5秒
    println!("done.....");
}

碎碎念:

从Intel的Sandy bridge开始,空间预取器会拉取成对的64字节缓存,也就是128字节缓存是效率最佳的缓存预取单元

cell用法(提供内部可变类型)

不用&mut也可以修改变量的值,一般用在闭包里

use std::cell::Cell;

fn main() {
    let counter = Cell::new(0);

    let increment = || {
        let value = counter.get();
        counter.set(value + 1);
    };

    for _ in 0..5 {
        increment();
    }

    let final_value = counter.get();
    println!("Final value: {}", final_value);
}

// Final value: 5

类似go的WaitGroup(挺好用)

use crossbeam::sync::WaitGroup;
use std::time::Duration;
fn main() {
    let wg = WaitGroup::new();
    for i in 0..10 {
        let wg = wg.clone(); // 创建一个waitgroup的克隆,增加引用计数
        std::thread::spawn(move || {
            println!("thread {} sleeping...", i);
            std::thread::sleep(Duration::from_millis(5000));
            drop(wg); // 实现了drop trait;删除一个引用计数,认为任务已经完成(如果注释掉这行,wait就不生效了)
        });
    }

    wg.wait(); // 阻塞直到引用计数清空
    println!("done...");
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值