Ich muss Interlocked Operations (CompareExchange, Increment usw.) gegen Speicher in MemoryMappedFile
s in .NET verwenden.So verwenden Sie x64 Interlocked-Operationen gegen MemoryMappedFiles in .net
Ich fand diese answer zu einer sehr ähnlichen Frage. Das Problem besteht darin, dass Interlock-Operationen nicht aus der kernel32-DLL (oder einer anderen) auf einem 64-Bit-Betriebssystem exportiert werden (siehe z. B. http://blog.kalmbachnet.de/?postid=46).
Gibt es eine andere Möglichkeit, wie ich Interlocked-Funktionen auf einem Speicherblock in einem 64-Bit-.NET-Prozess aufrufen kann?
Ich würde versuchen, meine eigene C Dll mit exportierten Funktionen zu schreiben, die verriegelte Funktionen aufrufen, und PInvoice es von .NET. –
@AlexFarber Ausgezeichneter Punkt! Ich wollte nur nachfragen :) Wissen Sie zufällig, ob ich die ASM-Implementierung der intrinsischen Interlocked-Funktionen des Compilers (z. B. [http://msdn.microsoft.com/de-de/library/2ddez55b(v = vs.80) .aspx] (http://msdn.microsoft.com/en-us/library/2ddez55b (v = vs.80) .aspx))? Damit ich den ASM-Code nicht neu erfinden muss – Jan
Sie müssen dies nicht tun, rufen Sie nur erforderliche Funktionen von nativen Dll, Compiler wird den Rest erledigen. Ich meine, für jede verriegelte Funktion, die Sie benötigen, exportierte DLL-Funktion schreiben, die Interlocked-Funktion aufruft. –