AA vs __gshared
    Steven Schveighoffer 
    schveiguy at gmail.com
       
    Fri Jul 28 11:15:31 UTC 2023
    
    
  
On 7/28/23 4:39 AM, IchorDev wrote:
> Issue is, this code I posted actually runs just fine, unlike the real code.
> My actual code does this HIGHLY SUSPICIOUS thing when printing their 
> length each time before using them:
> ```
> 766
> 766
> 765
> 766
> 767
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 768
> 128000
> Error Program exited with code -11
> (backtrace:)
> #0  0x0000555555670c46 in rt.aaA.Impl.findSlotLookup(ulong, scope 
> const(void*), scope const(TypeInfo)) inout ()
> #1  0x0000555555661592 in _aaInX ()
> ```
My suspicion would be a race condition in your real code, and no race 
condition in this toy code. Second suspicion would be memory corruption 
(possibly caused by a race condition).
> Therefore I must logically conclude that DRuntime's AAs are cursed! 
> Unless this is a well-known issue or something...
AAs have worked forever. I've never had problems with them. Not saying 
there's not a bug here, maybe there is. But I would be surprised.
> Thinking back, I've actually had them cause segfaults in non-threaded 
> code, maybe `__gshared` was never the cause at all.
All `__gshared` does is give you storage that is accessible from all 
threads, but is not typed as `shared`. It doesn't change how the data is 
used.
-Steve
    
    
More information about the Digitalmars-d-learn
mailing list