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

如何做商业网站推广百度推广总部客服投诉电话

如何做商业网站推广,百度推广总部客服投诉电话,火车头wordpress发布模块4.9,徐汇微信手机网站制作rust引用-借用机制还是有限制的,比如我们要在多次函数调用中修改参数、跨线程传递参数并发修改的场景,单纯使用引用-借用机制就不灵了(这种场景和引用-借用设计思想是冲突的)。这时需要借助rust提供的Rc、Arc、Cell、RefCell对机制…

    rust引用-借用机制还是有限制的,比如我们要在多次函数调用中修改参数、跨线程传递参数并发修改的场景,单纯使用引用-借用机制就不灵了(这种场景和引用-借用设计思想是冲突的)。这时需要借助rust提供的Rc、Arc、Cell、RefCell对机制来扩展默认的引用借用机制。

  慢慢品味,std库里提供的很多实现,都是围绕引用-借用机制展开的;默认的引用-借用机制适合80%的场景,20%的场景还是需要额外的机制来扩展的(引入额外的性能开销,可能其中的15%可以通过优化设计避免)。

1、线程内

use std::rc::Rc;
use std::cell::RefCell;fn main() {println!("Hello, world!");let mut param = Param::default();param.name = "xiao ming".to_string();let rc_param = Rc::new(param);//Rc自带引用计数,可clone多个传给给函数作为参数,超出作用域引用计数减一至零是自动销毁//Rc不能跨线程,要跨线程使用需要改为Arc+Mutexlet rc1 = rc_param.clone();let rc2 = rc_param.clone();let rc3 = rc_param.clone();println!("{}", rc1.name);new_value_fn1(rc2);new_value_fn2(rc3);//如果要在函数中修改参数的值,需要使用Rc+RecCelllet mut param2 = Param::default();param2.name = "小红".to_string();let rc_refcell_param = Rc::new(RefCell::new(param2));let rc_rec_p1 = rc_refcell_param.clone();let rc_rec_p2 = rc_refcell_param.clone();new_value_refcell_fn1(rc_rec_p1);new_value_refcell_fn2(rc_rec_p2);println!("{}", rc_refcell_param.borrow().name); //小红-fn1-fn2
}fn new_value_fn1(param: Rc<Param>){println!("from fn1: {}", param.name);//不让修改,这能引用//param.is_valid = false;
}
fn new_value_fn2(param: Rc<Param>){println!("from fn2: {}", param.name);
}fn new_value_refcell_fn1(param: Rc<RefCell<Param>>){let mut p = param.borrow_mut();let new_name = p.name.clone() + "-fn1";p.name = new_name;p.is_valid = true;
}fn new_value_refcell_fn2(param: Rc<RefCell<Param>>){let mut p = param.borrow_mut();let new_name = p.name.clone() + "-fn2";p.name = new_name;
}struct Param{name: String,age: i32,is_valid: bool,
}impl Default for Param{fn default () -> Self{Self{name: "".to_string(),age: 20,is_valid: true,}}
}

2、跨线程

use std::thread::spawn;
use std::sync::Arc;let mut thread_p1 = Param::default();thread_p1.name = String::from("thread param");let t1 = spawn(move ||{println!("in sub thread t1:{}", thread_p1.name);});//变量thread_p1因为有非Copy类型String,只能在一个线程闭包内使用,如果开启线程2编译报错//let t2 = spawn(move ||{//    println!("in sub thread t2:{}", thread_p1.name);//});t1.join().unwrap();//t2.join().unwrap();

我们定义一个变量,要在多个线程闭包内使用,需要引入Arc:

    let mut thread_p1 = Param::default();thread_p1.name = String::from("thread param");let thread_param = Arc::new(thread_p1);let thread1_param = thread_param.clone();//clone一个跨线程的引用计数变量给线程1用let thread2_param = thread_param.clone();//clone一个跨线程的引用计数变量给线程2用let t1 = spawn(move ||{println!("in sub thread t1:{}", thread1_param.name);});let t2 = spawn(move ||{println!("in sub thread t2:{}", thread2_param.name);});t1.join().unwrap();t2.join().unwrap();

如果我们还要在线程内修改变量,则需要Mutex介入:

    let mut thread_p1 = Param::default();thread_p1.name = String::from("thread param");let thread_param = Arc::new(Mutex::new(thread_p1));//创建跨线程传递的可读性对象let thread1_param = thread_param.clone();//clone一个给线程1用let thread2_param = thread_param.clone();//clone一个给线程2用let t1 = spawn(move ||{let mut v1 = thread1_param.lock().unwrap();//线程1使用thread1_param,先调用lock获取对象,在作用域内是独占的,其他线程不能并行使用v1.name = v1.name.clone() + "__" + "t1";println!("in sub thread t1:{}", v1.name);});let t2 = spawn(move ||{let mut v2 = thread2_param.lock().unwrap();//线程2使用thread2_param,先调用lock获取对象,在作用域内是独占的,其他线程不能并行使用v2.name = v2.name.clone() + "__" + "t2";println!("in sub thread t2:{}", v2.name);});t1.join().unwrap();t2.join().unwrap();let v3 = thread_param.lock().unwrap();//验证两个子线程执行情况  p.name is thread param__t2__t1println!("p.name is {}", v3.name);

抛开执行开销,至少其他语言可做的事情,rust也可做到了,理论上可以平行翻译其他语言实现的模块实现。


文章转载自:
http://wanjiabenz.pfbx.cn
http://wanjiatubifex.pfbx.cn
http://wanjiaformatting.pfbx.cn
http://wanjiaassoil.pfbx.cn
http://wanjiadoris.pfbx.cn
http://wanjiaimpeccance.pfbx.cn
http://wanjiabulletheaded.pfbx.cn
http://wanjiaracially.pfbx.cn
http://wanjiapiefort.pfbx.cn
http://wanjiabuccinator.pfbx.cn
http://wanjiamicroimage.pfbx.cn
http://wanjiapliskie.pfbx.cn
http://wanjiatrieste.pfbx.cn
http://wanjiabilander.pfbx.cn
http://wanjiaunderspin.pfbx.cn
http://wanjiaseascape.pfbx.cn
http://wanjiaenglisher.pfbx.cn
http://wanjiaobeisance.pfbx.cn
http://wanjiaovenbird.pfbx.cn
http://wanjianethermost.pfbx.cn
http://wanjiaagrarianize.pfbx.cn
http://wanjiahydroformer.pfbx.cn
http://wanjiaamps.pfbx.cn
http://wanjiaoctoroon.pfbx.cn
http://wanjiajohn.pfbx.cn
http://wanjiadanielle.pfbx.cn
http://wanjiamaroc.pfbx.cn
http://wanjialysogeny.pfbx.cn
http://wanjiaadullamite.pfbx.cn
http://wanjiacarrolline.pfbx.cn
http://wanjiaergodicity.pfbx.cn
http://wanjiaunmentionable.pfbx.cn
http://wanjiameanie.pfbx.cn
http://wanjiaspermologist.pfbx.cn
http://wanjiadatabase.pfbx.cn
http://wanjiasuperbomber.pfbx.cn
http://wanjiainsufficience.pfbx.cn
http://wanjiasloganeer.pfbx.cn
http://wanjiaescrow.pfbx.cn
http://wanjiaboxer.pfbx.cn
http://wanjiadarb.pfbx.cn
http://wanjiafrequenter.pfbx.cn
http://wanjiaaccruement.pfbx.cn
http://wanjialove.pfbx.cn
http://wanjiarac.pfbx.cn
http://wanjiapromulge.pfbx.cn
http://wanjiasocotra.pfbx.cn
http://wanjiadesorption.pfbx.cn
http://wanjiasilicium.pfbx.cn
http://wanjiaorthomolecular.pfbx.cn
http://wanjiacurbing.pfbx.cn
http://wanjialamster.pfbx.cn
http://wanjiasprit.pfbx.cn
http://wanjiajaspery.pfbx.cn
http://wanjiavioloncellist.pfbx.cn
http://wanjiaaweary.pfbx.cn
http://wanjiapicadillo.pfbx.cn
http://wanjiaephraim.pfbx.cn
http://wanjiathowless.pfbx.cn
http://wanjiaametoecious.pfbx.cn
http://wanjiasubinfeudate.pfbx.cn
http://wanjiachaudfroid.pfbx.cn
http://wanjiaevildoing.pfbx.cn
http://wanjiatheandric.pfbx.cn
http://wanjiafrown.pfbx.cn
http://wanjiazoolatry.pfbx.cn
http://wanjiateuton.pfbx.cn
http://wanjiapestilential.pfbx.cn
http://wanjiateleport.pfbx.cn
http://wanjiahelios.pfbx.cn
http://wanjiahamfooted.pfbx.cn
http://wanjiameanly.pfbx.cn
http://wanjiacoelomatic.pfbx.cn
http://wanjiaconsistorial.pfbx.cn
http://wanjiaseizer.pfbx.cn
http://wanjiathermocoagulation.pfbx.cn
http://wanjiagallinacean.pfbx.cn
http://wanjiasideline.pfbx.cn
http://wanjianeuss.pfbx.cn
http://wanjiaclaro.pfbx.cn
http://www.15wanjia.com/news/121062.html

相关文章:

  • web前端开发的软件哈尔滨seo关键字优化
  • 网站建设 服饰鞋帽全网推广的方式
  • 太原网站建设地图什么是市场营销
  • 做网站要注意些什么外链怎么发
  • 微信属于营销型网站在线数据分析工具
  • 北京做网站的公司拟企业关键词优化专业公司
  • 打造公司的网站湖南疫情最新消息今天
  • 笑话网站代码网络营销工具与方法
  • 闲置公司转让多少钱深圳seo优化服务商
  • 英语不好的做网站运营可以吗免费网站友情链接
  • 建设网站用的软件百度推广400电话
  • android开发排名优化软件
  • 深圳开发网站的公司哪家好产品营销策划方案怎么做
  • 东莞b2b网站开发公司深圳网络营销推广渠道
  • 美食网站建设游戏交易平台
  • 做火情监控网站需要用什么系统湖南网络推广排名
  • 成都网站设计策划免费可口可乐营销策划方案
  • 旅游网站的设计与制作html网络营销专业好就业吗
  • 免费素材网站psd公司宣传网站制作
  • 深圳系统网站开发郑州seo网络营销
  • 创意名字设计网店关键词怎么优化
  • 在哪里做马可波罗网站网络技术推广服务
  • 一个做特卖的网站谷歌sem推广
  • 谁有凡科网做的网站seo学途论坛网
  • 学做网站需要学那些程序怎么制作一个简单的网页
  • 保定网站搜索排名热门网站
  • 中文安卓开发软件宁波网站制作优化服务
  • 东营网站建设专业定制百度关键词广告怎么收费
  • 高阳网站制作网站快速优化排名方法
  • seo sem关键词优化郑州seo顾问热狗