Exemplos
Send + Sync
A maioria dos tipos que vocĂȘ encontra sĂŁo Send + Sync
:
i8
,f32
,bool
,char
,&str
, ...(T1, T2)
,[T; N]
,&[T]
,struct { x: T }
, ...String
,Option<T>
,Vec<T>
,Box<T>
, ...Arc<T>
: Explicitamente thread-safe via contagem de referĂȘncia atĂŽmica.Mutex<T>
: Explicitamente thread-safe via bloqueio interno.mpsc::Sender<T>
: As of 1.72.0.AtomicBool
,AtomicU8
, ...: Usa instruçÔes atÎmicas especiais.
Os tipos genéricos são tipicamente Send + Sync
quando os parĂąmetros de tipo sĂŁo Send + Sync
.
Send + !Sync
Esses tipos podem ser movidos para outras threads, mas nĂŁo sĂŁo seguros para threads. Normalmente por causa da mutabilidade interior:
mpsc::Receiver<T>
Cell<T>
RefCell<T>
!Send + Sync
Esses tipos sĂŁo thread-safe, mas nĂŁo podem ser movidos para outro thread:
MutexGuard<T>
: Usa primitivas a nĂvel de sistema operacional que devem ser desalocadas no thread que as criou.
!Send + !Sync
Esses tipos nĂŁo sĂŁo thread-safe e nĂŁo podem ser movidos para outros threads:
Rc<T>
: cadaRc<T>
tem uma referĂȘncia a umRcBox<T>
, que contĂ©m uma contagem de referĂȘncia nĂŁo atĂŽmica.*const T
,*mut T
: Rust assume que ponteiros brutos podem ter consideraçÔes de especiais de concorrĂȘncia.