+ Sync?
unsafe impl<T: ?Sized + Sync + Send> Send for Arc<T> {}
Два арка в разных потоках означает, что мы можем вызывать методы T из разных потоков одновременно, а Sync как-раз и обозначает, что можно это делать.
Я же правильно понимаю что Send это только про передачу в другой тред? Без sync я даже прочитать не могу, верно? Просто зачем мне sync на arc: Send, если я хочу просто его передать?
Компилятор не может гарантировать, что есть только один Arc<T>, указывающий на объект. Значит не может гарантировать, что доступ к T будет осуществляться только из одного потока. А если доступ к T может осуществляться из нескольких потоков, то для этого нужно T: Sync
Я просто не понимаю зачем нужно ограничение + Sync для реализации Send, почему это ограничение есть не только для Sync, но и для Send?
Потому что Arc при клонировании и передаче успешно делится ссылками на T опосредованно, через Deref.
Вот после того как я узнал что &T: Send когда T: Send + Sync, то теперь стало понятно, что Arc для ссылки это требует
Обсуждают сегодня