从多个线程读取全局值
问题描述:
C++程序员在这里学习D. 这是一个非常简化的例子,用于演示我在真实代码中遇到的问题。我完全了解全局变量的代码风格问题,我只是想明白为什么这不起作用。从多个线程读取全局值
我有一个“全局”变量,我在创建任何线程之前在主程序中进行初始化。然后我有一些线程读取该变量。它被设置为从未,因此在它被设置之后应该没有竞争条件读取它而没有同步。
但它不起作用。我从来没有看到我的线程中的值12,他们总是读取值0. 我知道在C++中,您应该使用互斥锁或std :: atomic变量来确保写入一个线程的值在另一个线程中可见,并且在D中可能也是如此,但是我会认为对派生的调用几乎是100%可能做了同步的事情,加上我尝试了一个互斥体,甚至当我试图用互斥体保护值时,我仍然看到主线程中有12个,生成线程中有0个。
有什么我需要做的,以使这项工作?
不管我做什么,我得到: -
From thread A=0
From main A=12
的代码是: -
import std.concurrency;
import std.stdio;
import core.thread;
int a;
void myThread()
{
writeln("From thread A=", a);
}
void main()
{
a = 12;
spawn(&myThread);
Thread.sleep(2.seconds);
writeln("From main A=", a);
}
答
中的变量d是线程局部的默认。请使用shared
或__gshared
。
啊对了,当然,我知道这一点,在这方面没有想到。我猜想C++和D的风险是相似的。谢谢。 – jcoder