On Thu, 09 Dec 2010 11:38:00 -0500, Andrej Mitrovic
<andrej.mitrov...@gmail.com> wrote:
I know I prefer using shared() when interfacing with C.
I've tried using __gshared once when interfacing with C code. But I
had crashes all the time, using shared instead made my app stable
again. It might be related to the way the C code worked, since
multiple threads were involved. Anyway.. that's my experience with
gshared..
__gshared is the equivalent of what normal globals used to be (in D1 and
earlier versions of D2). It's the same as a global variable in C.
shared is exactly the same as __gshared except the compiler inserts memory
barriers around reads/writes (the C compiler does not), and shared is a
type modifier, so it's available in the TypeInfo of the variable. Some
parts of the runtime use that to determine certain behaviors, and I am
aware of one problem with __gshared that needs to be documented -- array
appending.
__gshared is unprotected sharing, and the type system is not aware that it
is shared. Can you remember what specifically you were doing with the
variable?
BTW, __gshared should have no problems in a single-threadded app.
-Steve
On 12/9/10, Steven Schveighoffer <schvei...@yahoo.com> wrote:
On Thu, 09 Dec 2010 10:15:59 -0500, CrypticMetaphor
<crypticmetapho...@gmail.com> wrote:
And how I supposed to call the c function?
Mark the extern(C) integer as __gshared in D. That will put it in the
global namespace instead of TLS.
e.g.:
extern(C) { // this is needed to make it available from C
__gshared int globalFromD;
}