Devo utilizzare le operazioni interbloccate (CompareExchange, Increment ecc.) Nella memoria in MemoryMappedFile
s in .NET.Come utilizzare le operazioni interbloccate x64 contro MemoryMappedFiles in .net
Ho trovato questo answer a una domanda molto simile. Il problema è che le operazioni interbloccate non vengono esportate da dll kernel32 (o qualsiasi altra) su OS a 64 bit (vedere ad esempio http://blog.kalmbachnet.de/?postid=46).
C'è un altro modo in cui posso chiamare le funzioni interbloccate su un blocco di memoria in un processo .NET a 64 bit?
Proverei a scrivere il mio C Dll con funzioni esportate che chiamano funzioni interbloccate e PInvoke da .NET. –
@AlexFarber Punto eccellente! Stavo solo andando a chiedere informazioni su questo :) Ti capita di sapere se posso facilmente scoprire l'implementazione ASM delle funzioni intrinseche interbloccate del compilatore (ad esempio [http://msdn.microsoft.com/en-us/library/2ddez55b(v = vs.80) aspx] (http://msdn.microsoft.com/en-us/library/2ddez55b (v = vs.80) aspx))? In modo che non debba reinventare il codice ASM me stesso – Jan
Non è necessario farlo, basta chiamare le funzioni richieste dalla DLL nativa, il compilatore farà il resto. Voglio dire, per ogni funzione interbloccata di cui hai bisogno, scrivi la funzione Dll esportata che chiama la funzione Interlocked. –