gpt4 book ai didi

multithreading - 从多个线程读取全局值

转载 作者:行者123 更新时间:2023-12-03 13:19:10 28 4
gpt4 key购买 nike

C++程序员在这里学习D。
这是一个非常简化的示例,用于演示我的真实代码中存在的问题。我完全了解全局变量的代码样式问题,我只想了解为什么这行不通。

我有一个“全局”变量,该变量在创建任何线程之前在主程序中初始化。然后,我有一些读取该变量的线程。设置之后,它不会被写入,而不会写入,因此设置后,在没有同步的情况下应该没有任何竞争条件来读取它。

但这是行不通的。我从未在线程中看到值12,它们始终读取值0。
我知道在C++中,您应该使用互斥锁或std::atomic变量,以确保在一个线程中写入的值在另一个线程中可见,并且在D中可能也是如此,但是我应该假定对spawn的调用几乎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

关于multithreading - 从多个线程读取全局值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45142087/

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