В "Programming Rust, 2nd Edition" Джима Бланди, Джейсона Орендорфа, Леоноры Ф.С. Тиндалл на стр. 520 есть график, на котором показаны функции «Отправить» и «Синхронизация» с перекрывающимися кругами, при этом «Синхронизация» полностью включена в «Отправить».
Это наводит меня на мысль, что все, что реализует Sync, должно также реализовывать Send, но этот пример со страницы 561 и все, что я видел, всегда указывает их обоих по отдельности,
type GenericError = Box<dyn std::error::Error + Send + Sync + 'static>
Почему, если 100% элементов, реализующих синхронизацию, также являются отправкой, разве синхронизация не является подчеркнутой отправкой? Почему границы признаков должны указывать оба? Почему люди отмечают оба. Есть ли какой-либо вариант использования чего-то, что должно быть синхронизировано, а не отправлено? В каком случае вы можете поделиться изменяемой ссылкой с другим потоком, но не передать права собственности этому другому потоку?
Я считаю, что это, в конечном счете, дубликат coderhelper.com/questions/28387421/…. Однако я подожду подтверждения, так как мои голоса за обман - золотые...