← Rust

LESSON / ARTICLE

アトミック操作と同期設計

アトミック操作と同期設計を学び、実務での設計判断につなげます。

同期の選択

複数スレッドが同じデータへアクセスする場合、適切な同期が必要です。Mutexは排他的アクセス、RwLockは複数読み取りと排他的書き込みを提供します。

Atomic型

AtomicBoolやAtomicUsizeは原子的な操作を提供します。メモリ順序にはRelaxed、Acquire、Release、AcqRel、SeqCstなどがあります。

use std::sync::atomic::{AtomicUsize,Ordering};
static COUNT:AtomicUsize=AtomicUsize::new(0);
fn main(){COUNT.fetch_add(1,Ordering::Relaxed);println!("{}",COUNT.load(Ordering::Relaxed));}

単純なカウンターと別データの公開順序保証は異なる要件です。後者ではRelaxedだけでは不十分な場合があります。

設計演習

統計カウンターと、カウンター更新を合図に別データを読む処理を比較し、MutexとAtomicの使い分けを説明してください。