之前關於「RcWriter」的文章中,我們將Rc智慧型指標和「Writer」一同連用,讓「Writer」的擁有權在被其他套件搶走之後還可以有辦法繼續使用同樣的「Writer」。但如果是在並發與並行的程式中,「RcWriter」就無用武之地了。



為了解釋這個問題,我們用以下這個程式來說明:

以上程式會編譯失敗,因為Rc智慧型指標並不是thread-safe的設計,無法跨執行緒使用。為了能夠讓RcWriter被用在不同的執行緒上,我們可以參考這篇文章的說明,改用「Arc」和「Mutex」智慧型指標來取代「Rc」和「RefCell」吧!

Synchronized Writer

「Synchronized Writer」是筆者開發的套件,將這篇文章介紹的「Rc Writer」套件,以「Arc」和「Mutex」智慧型指標來實作,使其可以跨執行緒使用。

Crates.io

https://crates.io/crates/synchronized-writer

Cargo.toml

synchronized-writer = "*"

使用方法

以上程式可以用「synchronized_writer」這個crate所提供的「SynchronizedWriter」結構體改寫如下:

如果想要取回「Writer」的擁有權,可以用「SynchronizedOptionWriter」結構體改寫成: