Share array element between threads
    via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Thu Nov  6 05:04:16 PST 2014
    
    
  
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);
     }
    
    
More information about the Digitalmars-d-learn
mailing list