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

Reply via email to