带有原始指针的静态结构表示“`core :: marker :: Sync`未实现......”

时间:2015-01-23 18:13:20

标签: pointers rust ffi

我正在尝试在Rust中创建一些将传递给C代码的静态数据结构。下面是一个无法编译的最小示例,我不知道错误在此上下文中的含义。所以问题是,为什么它失败了,我该如何解决呢?

pub struct MyStruct {
    pub name: *const str,
}

static mystruct: MyStruct = MyStruct {name: "why!!!\0"};

// src/lib.rs:52:29: 52:56 error: the trait `core::marker::Sync` is not implemented for the type `*const str`
// src/lib.rs:52 static mystruct: MyStruct = MyStruct {name: "why!!!\0"};
//                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~

1 个答案:

答案 0 :(得分:4)

此处Sync means "can be safely shared between tasks when aliased"。 Rust认为包含原始指针的类型默认情况下不能在线程之间共享,并且静态变量需要是可共享的。

如果您有理由相信您的类型确实可以在没有问题的线程之间共享,那么您可以向编译器断言您更了解:

unsafe impl Sync for MyStruct { }

如果您可以控制C库,我会鼓励提出结构需要是静态的要求 - 可能是围绕某种句柄设计库。