11.rust多线程开发

一、前言

多线程路径在很多语言中都是绕不开的话题,原因无它:可以提高程序执行效率。

如果不理解线程的,可以先看看下面这两篇文章:

本文重在实践,也就是如何用rust开发多线程程序,以及一些注意细节,并不会再过多讨论相关的概念。

二、启动新线程

在rust中启动新线程是一件很简单的事情,下面直接用一个例子进行说明:

fn main(){
    let t=std::thread::spawn(||{
        println!("这是一个新线程");
    });
    let _ = t.join(); //等待线程执行结束
}

上面的代码很简单,就是单纯的用std中的thread中的spawn函数创建一个新线程去打印一个字符串,但由于主线程结束会自动终止其它线程的执行,所以我在后面调用了其上的join函数来等待新开的线程执行结束。

注意,符号_在rust中意思等同于“忽略”,在这里的意思就是不需要返回值,同时可以屏蔽rust编译器的警告。

spawn函数的作用就是新开一个线程并执行传递进来的函数,这里函数我写的是闭包形式,当然你也可以写一个独立的函数:

fn main() {
    let t = std::thread::spawn(new_thread_fun);
    let _ = t.join(); //等待线程执行结束
}

fn new_thread_fun() {
    println!("这是一个新线程");
}

上面这两段代码是完全等价的,不过为了少写一个函数名,大部分人一般都更乐意用闭包,所以一定要习惯这种写法,后面文章中也会对其进行详细介绍。

rust中的闭包其实和C++中的lambda表达式差不多,其它语言基本都有类似的写法,后面章节会对其做更详细的介绍。

同时spawn函数新建线程后,还会返回一个实例,该实例可以将其理解为就是我们刚才新建的那个线程。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux