Constant GC allocations when sending large messages to threads?

Steven Schveighoffer schveiguy at gmail.com
Sun Feb 2 18:21:08 UTC 2020


On 2/2/20 12:13 PM, cc wrote:
> On Friday, 31 January 2020 at 15:47:26 UTC, Steven Schveighoffer wrote:
>> You could use RefCounted to build a struct that then is sendable with 
>> the data you need. RefCounted allocates using C malloc, not the GC.
> 
> Thanks for the tips.  How exactly would I go about sending a RefCounted 
> value?
> 
> static struct Foo {
>      int a;
>      @disable this(this);
> }
> auto t = RefCounted!Foo(Foo(5));
> tid.send(t);
> 
> Gives me: phobos\std\concurrency.d(625): Error: static assert: "Aliases 
> to mutable thread-local data not allowed."
> 
> Whereas trying to declare it as immutable gives me a pile of errors 
> including: Error: mutable method `std.typecons.RefCounted!(int, 
> cast(RefCountedAutoInitialize)1).RefCounted.__postblit` is not callable 
> using a `immutable` object
> 

Ugh, I think it should be doable. But I don't have time right now to try 
and figure it out.

The idea would be to send an immutable/shared piece of data that's 
refcounted across to another thread. If send is rejecting that, or 
refCounted is not playing nice, maybe file some bugzilla issues.

-Steve


More information about the Digitalmars-d-learn mailing list