| Thread overview | |||||||||
|---|---|---|---|---|---|---|---|---|---|
|
November 24, 2017 Concurrency send immutable | ||||
|---|---|---|---|---|
| ||||
immutable int[] arr = [1,2,3,4,5];
auto t = spawn({ receive( (immutable int[] v) => writeln(v) );});
t.send(arr);
whats the problem here?
| ||||
November 24, 2017 Re: Concurrency send immutable | ||||
|---|---|---|---|---|
| ||||
Posted in reply to SrMordred | 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
| |||
November 24, 2017 Re: Concurrency send immutable | ||||
|---|---|---|---|---|
| ||||
Posted in reply to SrMordred Attachments:
| 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 > | |||
November 24, 2017 Re: Concurrency send immutable | ||||
|---|---|---|---|---|
| ||||
Attachments:
| 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
>>
>
>
| |||
November 24, 2017 Re: Concurrency send immutable | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Daniel Kozak | 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 terminated Yes, 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 ? ) | |||
November 24, 2017 Re: Concurrency send immutable | ||||
|---|---|---|---|---|
| ||||
Posted in reply to SrMordred | 24.11.2017 15:53, SrMordred пишет: > 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 terminated > > Yes, 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) 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. > > 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 | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply