rust - 为什么弧> 需要 T:同步 + 发送?
问题描述
如果我有一个在线程之间发送不安全的类型,我用Arc<Mutex<T>>
. 这样我可以保证当我访问它时,我需要先解锁它。但是,Rust 仍然会抱怨 whenT
没有实现Send + Sync
.
它不应该适用于任何类型吗?在我的例子中,T
是一个通过 FFI 访问 C 对象的结构,所以我不能将它标记为Sync + Send
.
在这种情况下我能做什么,为什么 Rust 不接受Arc<Mutex<T>>
线程之间共享的安全?
解决方案
仅仅因为你是唯一一个(一次)访问某些东西的人,并不意味着它突然变得可以从不同的线程访问东西。它只是防止了一个问题:数据竞争。但是跨线程移动对象可能还有其他问题。
例如,低级窗口 API 通常只能从主线程调用。许多低级 API 也只能从它们被初始化的线程调用。如果你将这些 API 包装在 Rust 对象中,那么无论如何你都不希望这些对象在线程间移动。
推荐阅读
- python - 如何在不交换数据的情况下对双向链表进行冒泡排序(仅传输链接)
- unit-testing - 你如何嘲笑平等?
- python-3.x - 使用 selenium chromedriver 向下滚动网页
- .net - 引用不属于 .NET Standard 的程序集
- bash - 在 bash 脚本中使用 expect 交互,过早退出 bash 脚本
- javascript - 切换分隔线的更有效方式?
- javascript - 按钮组件中的 ReactJS 链接
- r - 使用 rvest 进行抓取
- ios - 如何删除其中有空格的键?(迅速)
- html - 我无法从 span 中提取数据到 excel