Timeout around function call

Ali Çehreli acehreli at yahoo.com
Wed Sep 23 20:44:51 UTC 2020


On 9/23/20 1:19 PM, Imperatorn wrote:

 > No. You should not share anything. Personally I would just send a
 > message to request termination or use the solution provided with timeout.

std.concurrency does not allow "mutable thread-local data"; so one needs 
to cast to shared (assuming copying is not desired e.g. because it's 
expensive). I am modifying my second program[1] with these changes:

The worker's receive() call mentions an element with shared ints:

     receive(
       // .. same as before

       // New message type:
       (shared(int)[] arr) {
         ownerTid.send(arr[0]);
       }
     );

The sender casts to shared and receives a shared(int):

   auto arr = new int[100];
   worker.send(cast(shared)arr);
   writefln!"Received array result: %s"(receiveOnly!(shared(int))());

It is unfortunate that receiveOnly!int does not work because the 
returned int is just a copy. Well, at least we have a way of 
distinguishing int from shared(int). Is it useful?

Ali

[1] https://forum.dlang.org/post/rkdrql$2uht$1@digitalmars.com


More information about the Digitalmars-d-learn mailing list