当前位置: 首页 > news >正文

深圳制作网站软件搜索网站排行榜

深圳制作网站软件,搜索网站排行榜,品牌建设成功的案例,官方智慧团建网站一个进程一定有一个主线程,主线程之外创建出来的线程称为子线程 多线程编程,其实就是在主线程之外创建子线程,让子线程和主线程并发运行,完成各自的任务。 Rust语言支持多线程编程。 Rust语言标准库中的 std::thread 模块用于多线…

一个进程一定有一个主线程,主线程之外创建出来的线程称为子线程
多线程编程,其实就是在主线程之外创建子线程,让子线程和主线程并发运行,完成各自的任务。
Rust语言支持多线程编程。

Rust语言标准库中的 std::thread 模块用于多线程编程。
std::thread 提供很很多方法用于创建线程、管理线程和结束线程。

一、创建线程

使用std::thread::spawn()方法创建一个线程。

pub fn spawn<F, T>(f: F) -> JoinHandle<T>

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

范例

use std::thread; // 导入线程模块
use std::time::Duration; // 导入时间模块
fn main() {//创建一个新线程thread::spawn(|| {for i in 1..10 {println!("hi number {} from the spawned thread!", i);thread::sleep(Duration::from_millis(1));}});// 主线程要执行的代码for i in 1..5 {println!("hi number {} from the main thread!", i);thread::sleep(Duration::from_millis(1));}
}
编译运行结果如下
hi number 1 from the main thread!
hi number 1 from the spawned thread!
hi number 2 from the main thread!
hi number 2 from the spawned thread!
hi number 3 from the main thread!
hi number 3 from the spawned thread!
hi number 4 from the spawned thread!
hi number 4 from the main thread!

咦,执行结果好像出错了? 是吗?
当主线程执行结束,那么就会自动关闭创建出来的子线程。
上面的代码,我们调用 thread::sleep() 函数强制线程休眠一段时间,这就允许不同的线程交替执行。
虽然某个线程休眠时会自动让出cpu,但并不保证其它线程会执行。这取决于操作系统如何调度线程。
这个范例的输出结果是随机的,主线程一旦执行完成程序就会自动退出,不会继续等待子线程。这就是子线程的输出结果不全的原因。

二、让主线程等待子线程

默认情况下,主线程并不会等待子线程执行完毕。为了避免这种情况,我们可以让主线程等待子线程执行完毕然后再继续执行。

Rust标准库提供了 join() 方法用于把子线程加入主线程等待队列。

spawn<F, T>(f: F) -> JoinHandle<T>

范例

use std::thread;
use std::time::Duration;
fn main() {let handle = thread::spawn(|| {for i in 1..10 {println!("hi number {} from the spawned thread!", i);thread::sleep(Duration::from_millis(1));}});for i in 1..5 {println!("hi number {} from the main thread!", i);thread::sleep(Duration::from_millis(1));}handle.join().unwrap();
}
编译运行结果如下
hi number 1 from the main thread!
hi number 1 from the spawned thread!
hi number 2 from the spawned thread!
hi number 2 from the main thread!
hi number 3 from the spawned thread!
hi number 3 from the main thread!
hi number 4 from the main thread!
hi number 4 from the spawned thread!
hi number 5 from the spawned thread!
hi number 6 from the spawned thread!
hi number 7 from the spawned thread!
hi number 8 from the spawned thread!
hi number 9 from the spawned thread!

从输出结果来看,主线程和子线程交替执行。
主线程等待子线程执行完毕是因为调用了 join() 方法。

三、move强制所有权迁移

这是一个经常遇到的情况:
实例

use std::thread;
fn main() {let s = "hello";let handle = thread::spawn(|| {println!("{}", s);});handle.join().unwrap();
}

在子线程中尝试使用当前函数的资源,这一定是错误的!因为所有权机制禁止这种危险情况的产生,它将破坏所有权机制销毁资源的一定性。我们可以使用闭包的move关键字来处理:
实例

use std::thread;
fn main() {let s = "hello";let handle = thread::spawn(move || {println!("{}", s);});handle.join().unwrap();
}

四、消息传递

使用通道传递消息,通道有两部分组成,一个发送者(transmitter)和一个接收者(receiver)。
std::sync::mpsc包含了消息传递的方法:
实例

use std::thread;
use std::sync::mpsc;
fn main() {let (tx, rx) = mpsc::channel();thread::spawn(move || {let val = String::from("hi");tx.send(val).unwrap();});let received = rx.recv().unwrap();println!("Got: {}", received);
}
运行结果:
Got: hi

子线程获得了主线程的发送者tx,并调用了它的send方法发送了一个字符串,然后主线程就通过对应的接收者rx接收到了。

http://www.hengruixuexiao.com/news/33677.html

相关文章:

  • 加强局网站建设it培训班出来工作有人要么
  • 万网域名管理网站淘宝搜索关键词排名查询工具
  • 网站备案时间有效期肇庆seo外包公司
  • 国际品牌的ui设计公司百度整站优化
  • 开县做网站夸克搜索网页版
  • 发卡网站搭建windows7系统优化工具
  • 如果熊掌号做的不好会不会影响网站线上卖货平台有哪些
  • 百度如何把网站做链接地址网络营销的推广方式都有哪些
  • phpwind 做企业网站网站服务器多少钱一年
  • 网站建设毕业设计中期检查中国最新军事新闻最新消息
  • 门户网站的好处seo 首页
  • 西安做网站微信公司留号码的广告网站不需要验证码
  • 汕头制作网站推荐深圳seo优化外包公司
  • 网站备案密码格式公司网站怎么优化
  • 长沙 建网站电话营销系统
  • 用国外服务器做赌博网站seo技巧seo排名优化
  • 星级酒店网站建设公司网络营销的重要性
  • 学校网站制作软件百度竞价多少钱一个点击
  • 大连餐饮网站建设百度知道官网首页登录入口
  • 上海网站建设定网络营销技巧和营销方法
  • 专门做心理测试的网站培训师资格证怎么考
  • 免费网站 推广网站seo搜索优化公司报价
  • 网站首屏做多大百度首页排名优化平台
  • 江门网站建设优化网站seo优化方案策划书
  • 龙岗二职长春做网站公司长春seo公司
  • 临沂网站建设有哪些网络营销员岗位的职责与要求
  • 威海专业做网站公司广东深圳疫情最新情况
  • 淘宝官方网站登录页面滕州seo
  • 厦门SEO_厦门网站建设全国疫情最新消息
  • 网站建设属于什么行业类别网络推广公司是干嘛的