> Asszem, rossz kódblokkokat néztél, mert ezekben szó nem volt az unsafe-ról
Jó kódblokkot néztem, mint az a szövegből is kiderül. Az unsafe-et csak hangsúlynak tettem hozzá, hogy még az sem érvényteleníti azt a szabályt, miszerint nem kapod meg az adatot, csak ellenőrzés után.
> Egy több magon futó, többthread-es, közös bufferen dolgozó kódban hogy gátolja meg a Rust a data race condition-t úgy, hogy ne nyírja ki az egészet?
- Szál csak Sync típusú adatra vehet át referenciát.
 - Sync típusú a csak olvasható adat, a Mutex<T> és RwLock<T>, és az atomi műveleteket használó típusok. De csinálhatsz magadnak egyéb szinkronizációs módszert, ha van ötleted még (lehet). unsafe-fel természetesen.
 - A Mutexből és RwLock-ból - az Option<T>-hez egészen hasonlóan - nem tudod kivenni az adatot, kizárólag a lock() (Mutex esetén), illetve read() és write() (RwLock esetén) hívás ad rá referenciát. Ami ráadásul nem is egészen nyers referencia, hanem Guard, ami azt jelenti, hogy kódblokkból kilépéskor elengedi a zárolást. Ne aggódj, attól még ugyanolyan gyors, mint egy pointer, a standard lib inline deref() metódusokat szokott ilyen helyeken használni.
 
Hát így.