第 29 天:🌐 在 Rust 中導航共享狀態並行:-同步,發送和原子奇蹟

https://dev.to/aniket_botre/day-29-navigating-shared-state-concurrency-in-rust-sync-send-and-atomic-wonders-4c49

Day 29:🌐 在 Rust 中導覽 Shared State Concurrency:- Sync、Send 和 Atomic Wonders

在 #100DaysOfCode 挑戰的第二十九天,我們將深入了解 shared state concurrency 的複雜性。準備好親眼見證 Mutex、Arc、sync、send traits 和一點點 atomic operations 的魔法,就像一場數碼芭蕾,而我們坐在第一排!

介紹 Shared State Concurrency 🧩🔀

在並行編程的世界中,分享並不總是關懷。它常常導致競爭條件,聽起來有趣的競賽,其實並不好玩。那麼,如何在執行緒間共享資料,卻不互相干涉呢?這就是 Shared State Concurrency。

Shared State Concurrency 就像你程式的聯合國,提供一個安全的空間,讓執行緒可以共享資料,互不干擾。我們透過兩個主要角色實現這種和諧:Mutex 和 Arc – 就像並發控制的蝙蝠俠和羅賓。🦸‍♂️🦸‍♂️

Mutex 魔法:確保獨佔存取🔐

Mutex 或 mutual exclusion(互斥)就像夜店的保全,只讓一個執行緒能夠同時存取資料。

這是 Mutex 的操作範例:(略去部分範例)

Arc – Shared Data 的守護者🔐

Arc(原子參考計數)在 Mutex 需要夥伴時出現,就像擁有超級英雄雙人組,確保共享擁有權與安全不會被犧牲。觀看它們的操作:(略去部分範例)

使用 Sync 和 Send traits 實現可擴展的並行性 🧬🚀

我們已見識了蝙蝠俠和羅賓,但那正義聯盟呢?Rust 中的 Sync 和 Send traits 允許可擴展的並行性。它們是確保我們的程式碼對多執行緒是安全的超級英雄。

The Send Trait

Send trait 表示實作該 trait 的類型的擁有權可以在執行緒間轉移。函數的使用在代碼中示例:

The Sync Trait

Sync trait 表示實作該 trait 的類型可以被多執行緒安全地引用。換句話說,如果 &T(對 T 的引用)是 Send,那麼任何類型 T 就是 Sync,這意味著可以安全地將對該類型的引用發送到另一個執行緒。

原子操作:不為人知的英雄 🦸‍♀️⚡

若執行緒是一支樂團,那麼原子操作就是鼓手。它們在背景中,保持節奏,確保一切運行順利。Rust 在 std::sync::atomic 模組提供原子型別,包括 AtomicBool、AtomicIsize、AtomicUsize 等,它們對應原始資料型別但確保原子存取。

這是一些原子操作的簡要摘要:(略去部分範例)

結語:壯闊的結局 🎉

我們深入探究了 Shared State Concurrency 的海洋,與 Mutex 和 Arc 一同遨遊,以及 Sync、Send traits 的航行,並見證了 Atomic Operations 的魔法。

請牢記,並行性是一頭棘手的野獸。就像下棋但所有棋子同時移動。但憑藉正確的工具和一點幽默感,你一定能夠掌握它!繼續深入,持續探索,持續編寫代碼!👨‍💻👩‍💻🌊

明天,請做好準備,我們即將踏入榮耀的終結篇:Rust 中的 Futures 和 Async/Await。準備好迎接這個絕頂之作!💻🎭 

RustLang #ConcurrencyMagic #SharedStateConcurrency #100DaysOfRust

via DEV Community

January 31, 2024 at 01:51AM

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *