在libcore中发送和同步的作用是什么?

时间:2017-04-19 00:07:05

标签: rust intrinsics

SyncSend在标准库的thread API中扮演重要角色。但是,它们也包含在libcore中。在后者中,有一些类型可以实现它们,但是我找不到任何"消费者",也就是说,某些API会将这些特征用作边界。

他们是否有一些编译器知道的特殊行为/含义?请注意,它们是lang项目,所以它们在某种程度上是特殊的。 Sync似乎是related to statics,但链接没有详细说明。

TL; DR:,如果SendSync是关于线程安全的,那么它们在libcore中在没有多重概念的情况下会发挥什么作用-threading?编译器为lang项分配了什么语义?

2 个答案:

答案 0 :(得分:6)

  

如果SendSync是关于线程安全的,那么它们在没有多线程概念的libcore中会扮演什么角色?

libcore是关于设定语言的核心概念; SendSync是该语言的核心:编译器知道并了解它们 1

libcore使用多线程本身的事实是正交的,并且不会对此选择产生影响。

顺便说一句,请考虑这只是因为libcore没有多线程并不意味着无法在具有多线程的libcore之上构建替代标准库。毕竟,这是将corestd分开的目的。

1 正如@kennytm在评论中所提到的,Rust有一个用户可访问的机制,允许根据所有特征是否由所有结构字段实现来自动传播标记特征。但是,SendSync略有不足,因为它不支持&(Trait + Send),因此编译器需要有关这两者的特殊知识,这就是为什么它们是lang项目。< / em>的

答案 1 :(得分:1)

The compiler will crash if you declare a static variable and no Sync trait exists

毕竟,仅仅因为我们没有libstd在线程中实现线程并不意味着没有并发访问(如果你是裸机) ,你可能有中断处理程序担心)。因此,为了使静态变量安全,编译器需要知道是否可以同时安全地访问静态变量。