<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>rust on 便利屋68 の home page</title><link>https://rikaaa0928.github.io/tags/rust/</link><description>Recent content in rust on 便利屋68 の home page</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 27 Oct 2024 19:15:00 +0800</lastBuildDate><atom:link href="https://rikaaa0928.github.io/tags/rust/index.xml" rel="self" type="application/rss+xml"/><item><title>Rust tokio: Send与Sync</title><link>https://rikaaa0928.github.io/posts/rust-tokio-learn-send-sync/</link><pubDate>Sun, 27 Oct 2024 19:15:00 +0800</pubDate><guid>https://rikaaa0928.github.io/posts/rust-tokio-learn-send-sync/</guid><description>tokio中，返回的future无脑实现Send，因为tokio异步框架并不能保证单个异步任务绑定某个真实线程执行，实现Send表示这个future可以安全的跨线程执行。
Sync表示并发安全，需要跨异步任务调用的必须是Sync，可以套Mutex实现非Sync转Sync，再套Arc实现clone。
// Sync 类型:
Arc // 当 T: Sync
Mutex // 当 T: Send
RwLock // 当 T: Send
AtomicBool
AtomicI32
Vec // 当 T: Sync
String
&amp;amp;T // 当 T: Sync
// 非 Sync 类型:
RefCell // 内部可变性不是线程安全的
Cell // 同上
Rc // 引用计数不是线程安全的
*mut T // 裸指针</description></item><item><title>Rust: 可变和引用</title><link>https://rikaaa0928.github.io/posts/rust-learn-mut-ref/</link><pubDate>Wed, 10 Jan 2024 09:40:00 +0800</pubDate><guid>https://rikaaa0928.github.io/posts/rust-learn-mut-ref/</guid><description>mut a: &amp;amp;mut i32 mut a表示a可变，可以被重新绑定
&amp;amp;表示(不可变)引用 &amp;amp;mut表示可变引用，即*a可变，可以被重新绑定
测试验证代码 fn change_i_mut_ref(i:&amp;amp;mut i32){ *i=2; // 给引用绑定新值，i 不可变，*i 指向的变量可变 } // fn change_i_mut_ref_err(i:&amp;amp;mut i32){ // i=xxxx; // i 不可变，不可重新绑定，等于什么都不行 // } fn change_mut_i(mut i:i32){ i=4; } fn change_mut_i_ref(mut i:&amp;amp;i32){ i=&amp;amp;5; } fn change_mut_i_mut_ref_change_i(mut i:&amp;amp;mut i32){ // i=&amp;amp;5; //会报错，因为 &amp;amp;5 的类型是 &amp;amp;i32, &amp;amp;mut 5 的类型是 &amp;amp;mut i32 // i=&amp;amp;mut 5; //一样会报错，因为 &amp;amp;mut 5 生命周期仅在函数内，函数返回后，i引用的值会被回收 } fn change_mut_i_mut_ref_change_ref(mut i:&amp;amp;mut i32){ *i=7; } #[tokio::test] async fn my_test1()-&amp;gt; crate::Result&amp;lt;()&amp;gt; { let mut i=1i32; println!</description></item></channel></rss>