前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >29.Rust-线程

29.Rust-线程

原创
作者头像
面向加薪学习
修改2022-09-04 11:50:47
2120
修改2022-09-04 11:50:47
举报
文章被收录于专栏:面向加薪学习面向加薪学习
  1. 现代的操作系统,是一个多任务操作系统,系统可以管理多个程序的运行,一个程序往往有一个或多个进程,而一个进程则有一个或多个线程。
  2. 让一个进程可以运行多个线程的机制叫做多线程。
  3. 一个进程一定有一个主线程,主线程之外创建出来的线程叫 子线程

多线程(并发)编程的一个重要思想就是 程序不同的部分可以同时独立运行互不干扰

创建线程

代码语言:txt
复制
std::thread::spawn()

//spawn() 函数的原型
pub fn spawn<F, T>(f: F) -> JoinHandle<T>

参数 f 是一个闭包(closure ) 是线程要执行的代码。

代码语言:txt
复制
fn main() {
    //子线程
    thread::spawn(|| {
        for i in 1..10 {
            println!("子线程 {}", i);
            thread::sleep(Duration::from_millis(1));
        }
    });
    // 主线程
    for i in 1..5 {
        println!("主线程 {}", i);
        thread::sleep(Duration::from_millis(1));
    }
}

当主线程执行结束,子线程就自动结束。

thread::sleep() 会让线程睡眠一段时间,某个线程睡眠的时候会让出 CPU,可以让不同的线程交替执行,要看操作系统如何调度线程。

join

上面的例子主线程结束后,子线程还没有运行完,但是子线程也结束了。如果想让子线程结束后,主线程再结束,我们就要使用Join 方法,把子线程加入主线程等待队列。

代码语言:txt
复制
spawn<F, T>(f: F) -> JoinHandle<T>
代码语言:txt
复制
//子线程
let handler = thread::spawn(|| {
    for i in 1..10 {
        println!("子线程 {}", i);
        thread::sleep(Duration::from_millis(1));
    }
});
// 主线程
for i in 1..5 {
    println!("主线程 {}", i);
    thread::sleep(Duration::from_millis(1));
}
handler.join().unwrap();

输出结果看 主线程让子线程执行完毕后,主线程才退出。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建线程
  • join
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档