gpt4 book ai didi

rust - 实现 Sync 特性会改变编译器输出吗?

转载 作者:行者123 更新时间:2023-11-29 08:05:47 25 4
gpt4 key购买 nike

如果我将我的结构标记为 Sync,编译器输出会有所不同吗?编译器会实现一些类似Mutex的魔法吗?

struct MyStruct {
data: RefCell<u32>,
}
unsafe impl Sync for MyStruct {}
unsafe impl Send for MyStruct {}

最佳答案

编译器使用一种名为“语言项”的机制来引用在库(通常是 core)中定义但被编译器使用的项(类型、特征等),无论是在编译器生成的代码中,用于验证代码或生成专门的错误消息。

SendSynccore 库中定义。 Sync 是一个语言项目,但 Send 不是。我能在编译器中找到的唯一对 Sync 的引用是它检查 static 变量的类型是否实现了 Sync。 (SendSync 过去对编译器来说更为特殊。在将 auto traits 添加到语言之前,它们被明确地实现为“auto traits”。)

除此之外,编译器不关心SendSync 是什么意思。正是这些库(具体来说,是通用于 Send/Sync 类型的类型/函数)赋予了特征以意义。

这两个特征都不会影响编译器针对特定类型发出的代码。使类型“线程安全”不是可以自动完成的事情。考虑一个包含许多字段的结构:即使字段都是原子类型,部分更新的结构也可能不处于有效状态。编译器不知道特定类型的不变量;只有程序员知道它们。因此,使类型线程安全是程序员的责任。

关于rust - 实现 Sync 特性会改变编译器输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57682282/

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