Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 06, 2014 Share array element between threads | ||||
---|---|---|---|---|
| ||||
Hi, when I execute this code I have 7 7 7 as result, I think I understand why. How can I execute a special task for one element ? import std.stdio; import std.parallelism; void main(string[] args) { class Account { public this(int id) { this.id = id; } int id; } Account[] accounts = [new Account(5), new Account(6), new Account(7)]; foreach(acc; accounts) { task(() { writeln(acc.id); }).executeInNewThread(); } readln(); } |
November 06, 2014 Re: Share array element between threads | ||||
---|---|---|---|---|
| ||||
Posted in reply to Misu | Misu:
> void main(string[] args)
> {
> class Account
> {
> public this(int id) { this.id = id; }
> int id;
> }
> ...
This is not an answer to your question, but note:
void main() {
class Foo {}
static class Bar {}
pragma(msg, __traits(classInstanceSize, Foo));
pragma(msg, __traits(classInstanceSize, Bar));
}
Output:
12u
8u
Bye,
bearophile
|
November 06, 2014 Re: Share array element between threads | ||||
---|---|---|---|---|
| ||||
Posted in reply to Misu | On Thursday, 6 November 2014 at 10:53:32 UTC, Misu wrote: > Hi, > > when I execute this code I have 7 7 7 as result, I think I understand why. > > How can I execute a special task for one element ? > > import std.stdio; > import std.parallelism; > > void main(string[] args) > { > class Account > { > public this(int id) { this.id = id; } > int id; > } > > Account[] accounts = [new Account(5), new Account(6), new Account(7)]; > > foreach(acc; accounts) > { > task(() { writeln(acc.id); }).executeInNewThread(); > } > > readln(); > } It's a bug: https://issues.dlang.org/show_bug.cgi?id=2043 As a workaround, you can nest the call in another lambda: foreach(acc; accounts) { (Account acc) { task(() { writeln(acc.id); }).executeInNewThread(); } (acc); } |
November 06, 2014 Re: Share array element between threads | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc Schütz | On Thursday, 6 November 2014 at 13:04:18 UTC, Marc Schütz wrote:
> It's a bug: https://issues.dlang.org/show_bug.cgi?id=2043
>
> As a workaround, you can nest the call in another lambda:
>
> foreach(acc; accounts)
> {
> (Account acc) {
> task(() { writeln(acc.id); }).executeInNewThread();
> } (acc);
> }
Ok that's good. thank you !
|
Copyright © 1999-2021 by the D Language Foundation