- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现线程A 和线程B 并行运行并共享全局变量。
下面是用python编写的代码。我想在中执行相同操作Dart (我不想使用future等待,因为它正在等待其他线程完成或必须等待。)
大小写变量:
val
ai ( a increment )
ad ( a decrement )
af ( a fail )
bi ( b increment )
bd ( b decrement )
bf ( b fail ) // when unable to get log
O.val (Original val received at time of executing)
C.val (Calculated val)
err= ai - ad + bi - bd - val
_/+ O.val C.val ai ad ai-ad bi bd bi-ad err
A- | 0 -1 | 0 1 -1 | 0 0 0 | 0
B+ | -1 0 | 0 1 -1 | 1 0 1 | 0
A- | 0 -1 | 0 2 -2 | 1 0 1 | 0
B+ | -1 0 | 0 2 -2 | 2 0 2 | 0
A- | 0 -1 | 0 3 -3 | 2 0 2 | 0
B- | -1 -2 | 0 3 -3 | 2 1 1 | 0
##############
# Python Code
# ############
import thread;
import time;
def lhrand(lo, hi): import random; return lo + int (random.random() * (hi - lo));
mutex= thread.allocate_lock();
val= 0;
ai= ad= af= 0;
bi= bd= bf= 0;
def pr(id, sign, _val):
global val, ai, ad, af, bi, bd, bf;
return "%s%s | %5d %5d | %5d %5d %5d | %5d %5d %5d | %4d" % (id, sign, _val, val, ai, ad, af, bi, bd, bf, ai - ad + bi - bd - val);
def A(id):
global val, ai, ad;
for j in range(0, 10000):
r= lhrand(0, 2);
s= "-+"[r];
w= [-1, 1][r];
line= None;
if mutex:
if mutex.acquire():
o= val;
if r == 0: ad+= 1; else: ai+= 1;
val= val + w;
pr(id, "-" if r == 0 else "+", o);
mutex.release();
line= pr(id, s, o);
print("%s over" % id);
return 0;
def B(id):
global val, bi, bd;
for j in range(0, 10000):
if mutex and mutex.acquire():
r= lhrand(0, 2);
o= x= val;
if r == 0: bd+= 1;
if r == 1: bi+= 1;
x= x - 1 if r == 0 else x + 1;
val= x;
pr(id, "-" if r == 0 else "+", o);
mutex.release();
print("%s over" % id);
return 0;
if __name__ == "__main__":
x= thread.start_new_thread(A, ("A",))
y= thread.start_new_thread(B, ("B",))
time.sleep(5.0);
pr("X", ".", val);
exit(0);
/////////////
// Dart Code
/////////////
import "dart:async";
import "dart:math";
import "package:threading/threading.dart";
import "package:sprintf/sprintf.dart";
int val= 0;
int ai= 0, ad= 0, bi=0, bd= 0;
int num= 10000;
Lock _lock = new Lock();
var isLockEnable= true;
Random random= new Random();
int lhrand(lo, hi)
{
return lo + random.nextInt(hi - lo);
}
int pr(id, sign, _val)
{
var s= sprintf("%s%s | %5d %5d | %5d %5d %5d | %5d %5d %5d | %4d", [id, sign, _val, val, ai, ad, ai - ad, bi, bd, bi - bd, ai - ad + bi - bd - val]);
print(s);
return 0;
}
Future A() async
{
int r, o, x;
var id= "A";
for(var j in Iterable<int>.generate(num).toList())
{
try
{
if(isLockEnable)
{
await _lock.acquire();
}
o= await Future((){ return val; });
x= val;
r= lhrand(0, 2);
x= val;
if(r == 0) { ad++; }
if(r == 1) { ai++; }
x= (r == 0) ? x - 1 : x + 1;
val= x;
pr(id, (r == 0) ? "-" : "+", o);
if(isLockEnable)
{
await _lock.release();
}
}
catch(e)
{
print("A failed to get lock.");
}
}
print("$id over");
}
Future B() async
{
int r, o, x;
var id= "B";
for(var j in Iterable<int>.generate(num).toList())
{
try
{
if(isLockEnable)
{
await _lock.acquire();
}
o= await Future((){ return val; });
r= lhrand(0, 2);
x= val;
if(r == 0) { bd++; }
if(r == 1) { bi++; }
x= (r == 0) ? x - 1 : x + 1;
val= x;
pr(id, (r == 0) ? "-" : "+", o);
if(isLockEnable)
{
await _lock.release();
}
}
catch(e)
{
print("B failed to get lock.");
}
}
print("$id over");
}
Future main() async
{
var AT= new Thread(A);
print("AT : " + AT.hashCode.toString());
var BT= new Thread(B);
print("BT : " + BT.hashCode.toString());
AT.start();
BT.start();
return 0;
}
最佳答案
Dart/Flutter是单线程的,无法共享全局变量。由于每个隔离区都有自己的内存,空间和所有内容。为了使其像多线程一样工作,您必须使用隔离,并且通过向彼此发送消息来通过端口使用通信。如果您不想使用Future,则可以使用隔离。
读
关于multithreading - Flutter Dart : How can we achieve multithreading like python or java in dart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60525666/
我有一个相当冗长的命令行程序,它需要用户输入参数,然后使用这些参数进行处理。我想做的是将程序拆分为交互式和非交互式。我试图这样做,并打算让非交互式程序“调用”交互式程序并使用结果(参数),基于这些参数
谁能解释为什么我们在构造函数的参数中使用大括号。 class Cars { String carName; bool isAuto; // create the constructor
我想知道是否有Dart函数,例如PHP的 strrev()。如果没有,您能否请向我展示任何源代码如何自行实现? 谢谢。 最佳答案 我还没有在API中找到一个新的Dart用户(截至今天下午)。但是,以任
我有一个组件,我想根据一个 bool 值绑定(bind)一个不同的 css 类。我的组件代码中有以下内容: bindCssClass(div, "open", this, "task.isOpen")
我一直在研究如何在dart中播放.wav文件,并且已经能够通过dart:html库中定义的AudioElement成功完成此操作。但是,我对使用dart:web_audio库感兴趣,并且遇到了所有这些
Dart 是否旨在实现许多与 Haxe 相同的功能,以便能够针对其他语言和运行时?它是语言和工具的既定目标还是已知目标? 最佳答案 不。Dart 专门针对 web 应用程序开发(更具体地说,客户端 w
我正在尝试让 dart 正常工作。作为编辑器,我想使用 emacs dart-mode。我有两个关于在没有 dart 编辑器的情况下使用 dart 的问题: 1) 我是否需要手动调用 dart2js,
我正在使用列表来创建墨水瓶按钮。我想将列表放在一个单独的 dart 文件中,并将该文件导入到我使用列表的文件中。我不知道如何导入列表。 https://pastebin.com/mf0kvsGu 我制
我正在编写一个 flutter 应用程序,它通过蓝牙 (FlutterBlue) 向设备发送命令。该设备控制一些 LED。通信总体上运行良好,但是:在用户界面上,我有一个控制光强度的 slider 。
我正在使用来自 Get started: command-line and server apps | Dart 的说明.运行 dart --version 时,我得到: Dart VM versio
var c 返回 3 但 10/7=1.4285,其余为 0.4285,operator % 有错误? void main() { var a = 10; var b = 7; var c
如文档中所述: The const keyword isn’t just for declaring constant variables. You can also use it to create
在 Dart 中,我如何最好地编写相当于(不可变/值/非对象) 的代码输出或引用参数 ? 例如在 C#-ish 中,我可能会编码: function void example() { int re
Dart 支持的多重继承机制有哪些? 最佳答案 不,Dart 不支持多重实现继承。 Dart 具有接口(interface),并且与大多数其他类似语言一样,它具有多个接口(interface)继承。
我正在寻找有关如何制作可以采用位置子参数的 web 组件的资源。就像是: {{value}} // this could be any uneditable element {{value}
使用polymer.dart 的Dart 应用程序的pubspec.yaml 文件如下所示(来自Polymer.dart Code Lab): name: polymer_and_dart descr
今天我决定开始学习 Dart 语言,我从 Tour 开始,那里有一个例子: // These work in a const string. const aConstNum = 0; const aC
我正在查找字符串类和其他一些资源,试图了解如何格式化字符串。首先,我试图将数字填充到字符串中,但不是精度。 例子: int a = 0, b = 5, c = 15, d = 46; String
我知道的大部分是Javascript。我相信“列表”是 Dart 最接近数组的东西,但它们在技术上是一样的吗?将它们视为数组是错误的吗?同样, map 会被视为对象吗?我意识到可能存在差异,但进行这种
现在,白色背景刺痛了我的眼睛,因为这是一个looong的黑夜。是否可以从 Dart 编辑器 (v 0.1) 更改主题(更改为更暗的主题)?选择背景颜色和语法高亮怎么样? 最佳答案 是的,这是可能的,我
我是一名优秀的程序员,十分优秀!