digitalmars.D.learn - Concurrency send immutable
- SrMordred (4/4) Nov 24 2017 immutable int[] arr = [1,2,3,4,5];
- SrMordred (2/7) Nov 24 2017 Nothing prints out
- Daniel Kozak (19/27) Nov 24 2017 Should print something like this:
- SrMordred (20/24) Nov 24 2017 Yes, it was, I was aware of this and put some sleep after that
- Daniel Kozak (9/39) Nov 24 2017 import std.stdio;
immutable int[] arr = [1,2,3,4,5]; auto t = spawn({ receive( (immutable int[] v) => writeln(v) );}); t.send(arr); whats the problem here?
Nov 24 2017
On Friday, 24 November 2017 at 12:05:16 UTC, SrMordred wrote:immutable int[] arr = [1,2,3,4,5]; auto t = spawn({ receive( (immutable int[] v) => writeln(v) );}); t.send(arr); whats the problem here?Nothing prints out
Nov 24 2017
Should print something like this: std.concurrency.OwnerTerminated std/concurrency.d(223): Owner terminated Because main thread is terminated, because types do not match this will work import std.stdio; import std.concurrency; void fun() { receive( (immutable (int)[] v) => writeln(v) ); } int main(string[] args) { immutable int[] arr = [1,2,3,4,5]; auto t = spawn(&fun); t.send(arr); return 0; } On Fri, Nov 24, 2017 at 1:06 PM, SrMordred via Digitalmars-d-learn < digitalmars-d-learn puremagic.com> wrote:On Friday, 24 November 2017 at 12:05:16 UTC, SrMordred wrote:immutable int[] arr = [1,2,3,4,5]; auto t = spawn({ receive( (immutable int[] v) => writeln(v) );}); t.send(arr); whats the problem here?Nothing prints out
Nov 24 2017
On Friday, 24 November 2017 at 12:36:42 UTC, Daniel Kozak wrote:Should print something like this: std.concurrency.OwnerTerminated std/concurrency.d(223): Owner terminatedYes, it was, I was aware of this and put some sleep after that too.(immutable (int)[] v)OK that parenteshis was the problem, thanks :) But its a little confusing i think, since the syntax for creating the array is different from the syntax on the arguments. and: immutable int[]; immutable (int)[]; immutable (int[]); (differences? what/when use) And other question: When you send immutable data , i'm getting a copied data on the other thread, or its the same data? Like: send(thread1, arr); send(thread2, arr); send(thread3, arr); send(thread4, arr); (multiple copies, or all threads are seeing the same addresses ? )
Nov 24 2017
24.11.2017 15:53, SrMordred пишет:On Friday, 24 November 2017 at 12:36:42 UTC, Daniel Kozak wrote:Yes, it's different. immutable int[] is equal to immutable (int[]) and means immutable slice of immutable int. on the other hand immutable (int)[] means _mutable_ slice of immutable int.Should print something like this: std.concurrency.OwnerTerminated std/concurrency.d(223): Owner terminatedYes, it was, I was aware of this and put some sleep after that too.(immutable (int)[] v)OK that parenteshis was the problem, thanks :) But its a little confusing i think, since the syntax for creating the array is different from the syntax on the arguments. and: immutable int[]; immutable (int)[]; immutable (int[]); (differences? what/when use)And other question: When you send immutable data , i'm getting a copied data on the other thread, or its the same data? Like: send(thread1, arr); send(thread2, arr); send(thread3, arr); send(thread4, arr); (multiple copies, or all threads are seeing the same addresses ? )the same data, it's the purpose of immutable
Nov 24 2017
import std.stdio; import std.traits; int main(string[] args) { immutable int[] arr = [1,2,3,4,5]; writeln(ImplicitConversionTargets!(typeof(arr)).stringof); return 0; } On Fri, Nov 24, 2017 at 1:36 PM, Daniel Kozak <kozzi11 gmail.com> wrote:Should print something like this: std.concurrency.OwnerTerminated std/concurrency.d(223): Owner terminated Because main thread is terminated, because types do not match this will work import std.stdio; import std.concurrency; void fun() { receive( (immutable (int)[] v) => writeln(v) ); } int main(string[] args) { immutable int[] arr = [1,2,3,4,5]; auto t = spawn(&fun); t.send(arr); return 0; } On Fri, Nov 24, 2017 at 1:06 PM, SrMordred via Digitalmars-d-learn < digitalmars-d-learn puremagic.com> wrote:On Friday, 24 November 2017 at 12:05:16 UTC, SrMordred wrote:immutable int[] arr = [1,2,3,4,5]; auto t = spawn({ receive( (immutable int[] v) => writeln(v) );}); t.send(arr); whats the problem here?Nothing prints out
Nov 24 2017