On Wednesday, 8 July 2015 at 12:08:37 UTC, Jonathan M Davis wrote:
By using __gshared, you're throwing away the compiler's help,
and it's _much_ more likely that you're going to write code
which causes the compiler to generate incorrect machine code,
because it's assuming that an object is thread-local when it's
not.
Generally what you have to do with shared is lock on a mutex,
cast away shared on the object you want to operate on, do
whatever you're going to do with it, and then release the lock
after there are no more thread-local references to the shared
object. And that's basically what you normally should be doing
in C++ code except that you don't have to cast away shared,
because C++ doesn't have it.
I know that there are a number of people who get frustrated
with shared and using __gshared instead, but unless you fully
understand what you're doing and how the language works, and
you're _really_ careful, you're going to shoot yourself in the
foot it subtle ways if you do that.
- Jonathan M Davis
Amen