D中的"共享"和"__共享"关键字

Meh*_*dad 9 shared d

如果没有一个内部使用的static情况下(即,当static关键字不存在,你也不会在全球范围内),有什么事的shared__gshared关键字吗?

例子:

struct Temp
{
       shared int i;
    __gshared int j;
}
Run Code Online (Sandbox Code Playgroud)

Ber*_*ard 4

共享 int 是 typed 的,它除了赋予它该类型之外什么shared(int)也不做。__gshared int是一个空操作——DMD 喜欢忽略空操作属性。

  • __gshared 不是一个空操作。它意味着静态。 (4认同)
  • 另外:虽然在局部变量的 dmd 当前实现中,“shared int”仅表现得像类型限定符(例如“const”),但正确实现的“shared”——按照我的理解——应该具有读取-获取和写入功能-release-semantics(即在许多体系结构上使用内存栅栏并避免某些编译器优化,另请参阅http://www.digitalmars.com/d/2.0/faq.html#shared_memory_barriers)。即使对于局部变量,这有时也会相关,例如,在其他线程内执行闭包的情况下(或者在跨线程堆栈访问的罕见情况下)。 (3认同)