Rust編程進階:051、send和sync trait介紹

1、有兩個併發概念內嵌於語言中:std::marker中的Sync和Send trait。
2、通過Send允許在線程間轉移所有權
(1)Send標記trait表明類型的所有權可以在線程間傳遞。幾乎所有的Rust類型都是Send的,但是例外:例如Rc<T>是不能Send的。
(2)任何完全由Send類型組成的類型也會自動被標記爲Send。
// struct A {
//     a
//     b
//     c
// }
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,甚至都不需要實現任何方法。他們只是用來加強併發相關的不可變性的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章