On Thursday, 29 March 2018 at 18:07:50 UTC, Jonathan M Davis wrote:
On Thursday, March 29, 2018 17:41:15 Chris M. via Digitalmars-d-learn wrote:
[...]

In general, the correct way to deal with a shared object is to protect access to it with a mutex and then within that protected section, you cast away shared so that it's treated as thread-local so that it can be operated on. Then when you release the mutex, you make sure that no thread-local references to the shared object persist. Most operations really aren't supposed to work while the object is treated as shared, because then you have a threading problem if the operation is non-atomic and doesn't protect itself with a mutex (though a member function on an object certainly could use a mutex internally, allowing it to be shared and work on a shared object).

[...]

Awesome, thanks for the explanation. Didn't realize synchronized had that extra syntax and what it did, that'll save me a few headaches. Now what would really be nice is if that syntax also cast away the shared implicitly while inside the critical section, but I can deal with it for now.

Reply via email to