Rust 程式設計視訊教程(進階)——019 sync 和 send trait 的可擴充套件併發

linghuyichong發表於2020-02-11

頭條地址:https://www.ixigua.com/i677586170644791348...
B站地址:https://www.bilibili.com/video/av81202308/

github地址:https://github.com/anonymousGiga/learn_rus...

1、有兩個併發概念內嵌於語言中:std::marker中的Sync和Send trait。

2、通過Send允許線上程間轉移所有權
(1)Send標記trait表明型別的所有權可以線上程間傳遞。幾乎所有的Rust型別都是Send的,但是例外:例如Rc<T>是不能Send的。
(2)任何完全由Send型別組成的型別也會自動被標記為Send。

3、Sync允許多執行緒訪問
(1)Sync 標記 trait 表明一個實現了 Sync 的型別可以安全的在多個執行緒中擁有其值的引用,即,對於任意型別 T,如果 &T(T 的引用)是 Send 的話 T 就是 Sync 的,這意味著其引用就可以安全的傳送到另一個執行緒。
(2)智慧指標 Rc<T> 也不是 Sync 的,出於其不是 Send 相同的原因。RefCell<T>和 Cell<T> 系列型別不是 Sync 的。RefCell<T> 在執行時所進行的借用檢查也不是執行緒安全的,Mutex<T> 是 Sync 的。

4、手動實現Send和Sync是不安全的
通常並不需要手動實現 Send 和 Sync trait,因為由 Send 和 Sync 的型別組成的型別,自動就是 Send 和 Sync 的。因為他們是標記 trait,甚至都不需要實現任何方法。他們只是用來加強併發相關的不可變性的。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

令狐一衝

相關文章