Реализация Sync
означает, что тип гарантирует, что ссылки на его значения могут быть разделены между потоками, без риска гонки данных в безопасном Rust.
Значения типа &Vec<T>
являются неизменяемыми, поэтому всегда безопасно делиться ими. Средство проверки заимствования в Rust уже запрещает существование изменяемой ссылки в то же время, что и любая другая ссылка на тот же объект, так что это работает автоматически в результате правил заимствования в Rust. Ничто не может изменить Vec
, пока оно используется, поэтому гонка данных невозможна. Конечно, если код unsafe
входит в картину, то гарантии ушли.
Большинство типов Sync
на самом деле. Те, которые не являются (например, RefCell
), имеют тенденцию иметь внутреннюю изменчивость или иным образом управлять ссылками вне контроля проверки заимствования во время компиляции.