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

static struct with raw pointer gives "`core::marker::Sync` is not implemented..."

我正在尝试在 Rust 中创建一些将传递给 C 代码的静态数据结构。下面是一个编译失败的小例子,我不知道这个错误在这个上下文中意味着什么。所以问题是,为什么会失败,我该如何解决?

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

static mystruct: MyStruct = MyStruct {name: "why!!![=10=]"};

// 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!!![=10=]"};
//                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~

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

如果您有理由相信您的类型确实可以在线程之间毫无问题地共享,那么您可以向编译器断言您知道得更多:

unsafe impl Sync for MyStruct { }

但是,如果您可以控制 C 库,我鼓励取消结构必须是静态的要求 - 也许围绕某种句柄设计库。