例
Send + Sync
よく見かけるほとんどの型は Send + Sync です:
i8、f32、bool、char、&strなど(T1, T2)、[T; N]、&[T]、struct { x: T }などString、Option<T>、Vec<T>、Box<T>などArc<T>: アトミックな参照カウントによって明示的にスレッドセーフです。Mutex<T>: 内部ロックによって明示的にスレッドセーフです。mpsc::Sender<T>: 1.72.0 以降。AtomicBool,AtomicU8, …: 特別なアトミック命令を使用します。
ジェネリック型は、型パラメータが Send + Sync であれば、通常 Send + Sync です。
Send + !Sync
これらの型は他のスレッドに移動できますが、スレッドセーフではありません。 通常は、内部可変性があるためです:
mpsc::Receiver<T>Cell<T>RefCell<T>
!Send + Sync
これらの型は複数のスレッドから(共有参照を介して)安全にアクセスできますが、 別のスレッドに移動することはできません:
MutexGuard<T>: 作成したスレッド上で解放しなければならない OS レベルの プリミティブを使用します。ただし、すでにロックされている mutex では、 ガードが共有されている任意のスレッドが、その保護対象の変数を読み取ることが できます(ただしT自体が!Syncの場合を除きます)。
!Send + !Sync
これらの型はスレッドセーフではなく、他のスレッドに移動することもできません:
Rc<T>: 各Rc<T>はRcBox<T>への参照を持っており、その中には 非アトミックな参照カウントが含まれています。*const T,*mut T: Rust は、生ポインタには特別な並行性に関する考慮事項が ある可能性があると想定しています。