-
Notifications
You must be signed in to change notification settings - Fork 24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add Sync to trait object #5
Conversation
@spacemeowx2 这个数据结构内部没有使用锁,所以无法在不同线程当中传递。所以,如果你需要在多线程环境里面都能访问和使用同一个 |
我认为这个PR的修改只要没有用到 如果是因为 附加文档链接: https://doc.rust-lang.org/std/marker/trait.Sync.html
|
@spacemeowx2 所以,总结来说, 补充:
|
我认为只要Cipher所有有关写的方法是&mut借用的,就应该安全的实现Sync。Sync并不会让结构体在多个线程有多个可写借用。根据Sync的文档,只要&Cipher是Send的就符合Sync的定义。 如果我错了请指出 |
没错,Sync 在定义上,只要其余的线程访问它的只读引用不会导致数据竞争就行。 我们的 但是像一些标准库里面的
实现 |
在我的场景下,需要把 shadowsocks 库的 ProxyClientStream 包装在一个结构体内,这个结构体会实现一个 async-trait。而这个 trait 会被动态分发(dyn MyTrait)。因为 async-trait 实现的问题,动态分发后再使用要求 Self: Sync。这个结构体中唯一 !Sync 的就是这个 Box。RwLock并不能为类型增加Sync。 如果您觉得加 Sync 实在不妥,可以关闭这个PR,我在库里继续使用 unsafe impl 实现来workaround。 |
@LuoZijun 实现 https://doc.rust-lang.org/std/marker/trait.Sync.html
而 因为 因此实现
我建议支持合并。 |
Added because all ciphers could be
Sync
.Because the current
Cipher
is!Sync
, I can not use it in my library : )