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

个人电子商务网站建设郑州关键词优化费用

个人电子商务网站建设,郑州关键词优化费用,北京网站模板下载,成都原画培训机构排行文章目录 Rust对多线程的支持std::thread::spawn创建线程线程与 move 闭包 使用消息传递在线程间传送数据std::sync::mpsc::channel()for received in rx接收两个producer 共享状态并发std::sync::Mutex在多个线程间共享Mutex,使用std::sync::Arc 参考 Rust对多线程…

文章目录

  • Rust对多线程的支持
      • std::thread::spawn创建线程
      • 线程与 move 闭包
    • 使用消息传递在线程间传送数据
      • std::sync::mpsc::channel()
      • for received in rx接收
      • 两个producer
  • 共享状态并发
    • std::sync::Mutex
    • 在多个线程间共享Mutex,使用std::sync::Arc
  • 参考

Rust对多线程的支持

rust默认仅支持一对一线程,也就是说操作系统线程。

可以引入crate包来使用绿色线程。

std::thread::spawn创建线程

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();
}

编译

 cargo run
warning: unused `Result` that must be used--> src/main.rs:17:5|
17 |     handle.join();|     ^^^^^^^^^^^^^|= note: this `Result` may be an `Err` variant, which should be handled= note: `#[warn(unused_must_use)]` on by default
help: use `let _ = ...` to ignore the resulting value|
17 |     let _ = handle.join();|     +++++++warning: `smartPtr` (bin "smartPtr") generated 1 warningFinished `dev` profile [unoptimized + debuginfo] target(s) in 0.00sRunning `target/debug/smartPtr`
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 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!

线程与 move 闭包

use std::thread;fn main() {let v = vec![1, 2, 3];let handle = thread::spawn(move || {println!("Here's a vector: {:?}", v);});handle.join().unwrap();
}

编译

 cargo runBlocking waiting for file lock on build directoryCompiling smartPtr v0.1.0 (/home/wangji/installer/rust/bobo/smartPtr)Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.07sRunning `target/debug/smartPtr`
Here's a vector: [1, 2, 3]

使用消息传递在线程间传送数据

std::sync::mpsc::channel()

只支持多个生产者和一个消费者

use std::sync::mpsc; //mpsc:multi-producer, single-consumer
use std::thread;fn main() {let (tx, rx) = mpsc::channel();thread::spawn(move || {let val = String::from("hi");tx.send(val).unwrap();});// recv()会阻塞// try_recv()是非阻塞,适合使用loop来尝试接收let received = rx.recv().unwrap();println!("Got: {}", received);
}

for received in rx接收

use std::sync::mpsc;
use std::thread;
use std::time::Duration;fn main() {let (tx, rx) = mpsc::channel();thread::spawn(move || {let vals = vec![String::from("hi"),String::from("from"),String::from("the"),String::from("thread"),];for val in vals {tx.send(val).unwrap();thread::sleep(Duration::from_secs(1));}});// 当发送方tx结束了,接收方rx就会结束(for循环也会结束)for received in rx {println!("Got: {}", received);}
}

两个producer

use std::sync::mpsc;
use std::thread;
use std::time::Duration;fn main() {// --snip--let (tx, rx) = mpsc::channel();let tx1 = tx.clone(); //tx和tx1都连接到mpsc::channel()thread::spawn(move || {let vals = vec![String::from("hi"),String::from("from"),String::from("the"),String::from("thread"),];for val in vals {tx1.send(val).unwrap();thread::sleep(Duration::from_secs(1));}});thread::spawn(move || {let vals = vec![String::from("more"),String::from("messages"),String::from("for"),String::from("you"),];for val in vals {tx.send(val).unwrap();thread::sleep(Duration::from_secs(1));}});for received in rx {println!("Got: {}", received);}// --snip--
}

共享状态并发

std::sync::Mutex

use std::sync::Mutex;fn main() {let m = Mutex::new(5);{// m.lock()会阻塞当前线程,获取锁位置let mut num = m.lock().unwrap();*num = 6;// 退出时会自动释放锁}println!("m = {:?}", m);
}

编译及运行

 cargo runCompiling smartPtr v0.1.0 (/home/wangji/installer/rust/bobo/smartPtr)Finished `dev` profile [unoptimized + debuginfo] target(s) in 6.57sRunning `target/debug/smartPtr`
m = Mutex { data: 6, poisoned: false, .. }

在多个线程间共享Mutex,使用std::sync::Arc

use std::sync::Arc;
use std::sync::Mutex;
use std::thread;fn main() {// Mutex于Arc经常一起使用// Rc::new可以让Mutex拥有多个所有者let counter = Arc::new(Mutex::new(0));let mut handles = vec![];for _ in 0..10 {let counter = Arc::clone(&counter); //Rc::clone不是真正的clone,只是增加引用计数let handle = thread::spawn(move || {let mut num = counter.lock().unwrap(); //counter.lock()可以获得可变的引用(类似于RefCell智能指针)*num += 1;});handles.push(handle);}for handle in handles {handle.join().unwrap();}println!("Result: {}", *counter.lock().unwrap());
}

编译

 cargo runCompiling smartPtr v0.1.0 (/home/wangji/installer/rust/bobo/smartPtr)Finished `dev` profile [unoptimized + debuginfo] target(s) in 5.85sRunning `target/debug/smartPtr`
Result: 10

参考

  • 第16章~创建线程
http://www.shuangfujiaoyu.com/news/50350.html

相关文章:

  • wordpress可视化拖拽编辑本溪seo优化
  • 四川省建设科技协会网站中文搜索引擎大全
  • 购物网站开发功能it培训机构排名
  • 做民宿最大的网站地推拉新app推广接单平台
  • 票务网站官方客服做五休二漳州seo网站快速排名
  • 南阳做网站价格谷歌seo优化公司
  • 网站用什么系统8大营销工具指的是哪些
  • 上海建设网站seo优化教程下载
  • 重庆中企动力科技股份有限公司怎么样重庆百度整站优化
  • 住房和城乡建设部政务服务门户网站seo视频教程汇总
  • 生鲜做的好的网站网络营销策划与创意
  • 手机网站开发 pdf西安网络推广seo0515
  • 咨询公司企业文化网站seo内容优化
  • IIS自己做的网站 无法访问数据库百度云网盘入口
  • 榆次建设局网站优化网站页面
  • wordpress 屏蔽谷歌长沙官网seo收费标准
  • 光电网站设计最新腾讯新闻
  • 萝岗定制型网站建设全国网站排名
  • 如何设计网站banner线下推广的渠道和方法
  • 做照片用的视频模板下载网站好app推广拉新渠道
  • 淘客推广网站怎么做的今天疫情最新消息
  • 苏州企业网站建设定制线上推广的好处
  • 个旧网站建设长沙seo网络推广
  • 网站首页地址是什么黑龙江新闻
  • 微信网站建设报价单 seo won
  • 网站快速收录方法站长统计app官方网站
  • 手机做网站时时彩赌博seo平台
  • 高性能网站开发网络营销与直播电商学什么
  • 凡科做的网站行不行网站查询器
  • 在线网站制作潍坊seo招聘