gpt4 book ai didi

rust - 这是 !Sync 类型声音的包装器吗?

转载 作者:行者123 更新时间:2023-12-05 02:28:47 26 4
gpt4 key购买 nike

我有时发现自己使用 !Sync 类型(例如 bumpalo::Bump )作为我希望成为 Sync 的类型实现的一部分。现在我对外部类型使用 unsafe impl Sync 来完成它,并且只在 &mut self 方法中接触内部类型。但是用像下面这样的包装器封装不安全是否合理?特别是 Send 边界是否正确?

pub struct UnCell<T> {
value: T
}

unsafe impl<T> Sync for UnCell<T> {}

impl<T> UnCell<T> {
pub fn new(value: T) -> Self {
Self { value }
}
pub fn into_inner(self) -> T {
self.value
}
pub fn get(&mut self) -> &T {
&self.value
}
}
impl<T: Send> UnCell<T> {
pub fn get_mut(&mut self) -> &mut T {
&mut self.value
}
}

最佳答案

不仅听起来不错,还有一个待定的 PR 可以添加一个类型,Exclusive,这将使您能够安全地做到这一点!

[core] add Exclusive to sync - #97629 .

您甚至不需要 Send 绑定(bind):对于 Send 的可变引用,its referent should also be - 因此,如果您在某个线程上有一个可变引用,您可以安全地访问引用对象。

关于rust - 这是 !Sync 类型声音的包装器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72545085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com