Почему у Vec есть черта Sync? - PullRequest
       35

Почему у Vec есть черта Sync?

0 голосов
/ 02 сентября 2018

Согласно документации , Vec<T> реализует Sync, если T реализует Sync. Кажется, что он генерируется автоматически каким-то волшебством, но я чувствую, что это нелогично, поскольку наивная реализация для векторов не является поточно-ориентированной.

Действительно ли Vec<T> в Rust Sync?

1 Ответ

0 голосов
/ 02 сентября 2018

Реализация Sync означает, что тип гарантирует, что ссылки на его значения могут быть разделены между потоками, без риска гонки данных в безопасном Rust.

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

Большинство типов Sync на самом деле. Те, которые не являются (например, RefCell), имеют тенденцию иметь внутреннюю изменчивость или иным образом управлять ссылками вне контроля проверки заимствования во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...