std::sync::atomic::AtomicUsize
реализует Sync
, что означает, что неизменяемые ссылки свободны от гонок данных при совместном использовании нескольких потоков. Почему AtomicUsize
не реализован Send
? Существует ли состояние, которое связано с нитью, создавшей атом, или это решение для языкового дизайна, связанное с тем, как атомические средства предназначены для использования, то есть через Arc<_>
и т. Д.Почему AtomicUsize не реализует Send?
4
A
ответ
2
Это трюк! AtomicUsize
делает реализовать Send
:
use std::sync::atomic::AtomicUsize;
fn checker<T>(_: T) where T: Send {}
fn main() {
checker(AtomicUsize::default());
}
На самом деле, есть даже automated test that ensures this is the case.
Гоча заключается в том, как Send
реализуется:
Эта черта автоматически выводится, когда компилятор определяет, что это необходимо.
Это означает, что Rustdoc не знает, что Send
реализован для типа, потому что большинство типов не реализуют его явно.
Это объясняет, почему AtomicPtr<T>
появляется в списке исполнителей. Он имеет специальную реализацию, которая игнорирует тип T
.
Это не идеальный вариант, и об этом говорят несколько вопросов (1, 2).
Смежные вопросы
- 1. Почему Int не реализует «моноид»?
- 2. Почему AbstractCollection не реализует equals()?
- 3. Почему java.util.List не реализует Serializable?
- 4. Почему java.io.File не реализует Autocloseable?
- 5. Почему не WhereSelectArrayIterator реализует ICollection?
- 6. Почему java.util.BitSet не реализует java.util.Set
- 7. Почему DataContractSerializer не реализует IFormatter?
- 8. Почему ObservableCollection не реализует IList?
- 9. Почему TcpListener не реализует IDisposable
- 10. Почему Mono реализует WCF?
- 11. Почему Thread реализует Runnable?
- 12. Почему HttpServlet реализует Serializable?
- 13. Почему IQueryable реализует IEnumerable?
- 14. Почему ServiceReference реализует Comparable?
- 15. Почему Enumerable.Range реализует IDisposable?
- 16. Почему ArrayList реализует Serializable?
- 17. Почему WSO2 Send Mediator не ждет ответа?
- 18. Почему System.Net.Mail.MailMessage реализует IDisposable
- 19. Почему ActionSupport реализует Serializable
- 20. Почему Intent реализует Cloneable?
- 21. Почему AtomicInteger реализует Serializable
- 22. Почему Enum реализует интерфейс?
- 23. Почему программа Send-Email Freeze?
- 24. Почему Java send требует Thread.Sleep
- 25. Почему интерфейс ExecutorService не реализует AutoCloseable?
- 26. Episerver - Почему BlockData не реализует IContent
- 27. Почему Djinn не реализует общие монадические функции?
- 28. Почему Kotlin не реализует Int.plus (значение: String)?
- 29. Почему PyPy 1.7 не реализует «стековый» стек?
- 30. Почему драйвер PDO PDO не реализует lastInsertId()?