gpt4 book ai didi

global-variables - 使用全局变量在 Dart 中的函数之间共享对象是否安全?

转载 作者:行者123 更新时间:2023-12-04 15:23:43 25 4
gpt4 key购买 nike

我看到“Dart是一种单线程编程语言”,所以我认为使用全局变量在函数之间传递数据是否安全:

var g = 1;

main() {
hello();
world();
}

def hello() {
g = 2;
}

def world() {
print(g);
}

我还看到“Dart 提供隔离”并且可以在多核上运行。这意味着如果不同的隔离访问同一个全局变量可能很危险,对吧?

安全吗?如果没有,有没有办法在函数之间共享对象而不将它们作为参数传递?

更新:

根据“Florian Loitsch”的回答,我刚刚用隔离为全局变量编写了一个测试:

import 'dart:isolate';

var g = 1;

echo() {
port.receive((msg, reply) {
reply.send('I received: $g');
});
}

main() {
var sendPort = spawnFunction(echo);

void test() {
g = 2;
sendPort.call('Hello from main').then((reply) {
print("I'm $g");
print(reply);
test();
});
}
test();
}

你可以看到一个isolate会设置全局变量 g到一个新值,另一个隔离将打印值 g .

它打印的控制台:
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1
I'm 2
I received: 1

很明显,它们不共享内存,并且全局变量是安全的。

最佳答案

Dart 在一个线程内是单线程的。因此,在全局变量中传递数据是安全的(虽然风格不好)。

隔离区有它们独立的堆(内存)并且不会相互干扰。全局变量保持安全。

我认为除了静态变量和参数之外,没有办法在函数之间传递变量。

关于global-variables - 使用全局变量在 Dart 中的函数之间共享对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17262209/

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