TravisWhidden , на самом деле вы можете использовать метод Interlocked.Increment Static, так как dan-gph говорит, что вам просто нужно быть осторожным с приведением указателя и приоритетом оператора, а также с использованием скобок вфакты ...
Вы приведете указатель памяти (плюс желаемое смещение) в указатель на переменную int, а затем будете использовать этот указатель в качестве переменной.Затем вам нужно будет использовать его в качестве ссылки на переменную.
Ниже вы найдете соответствующий фрагмент вашего кода с использованием библиотеки .net вместо внешнего статического импорта.
P & L
class Program
{
private static MemoryMappedFile _mmf;
private static MemoryMappedViewStream _mmvs;
static void Main(string[] args)
{
const int INT_OFFSET = 8;
_mmf = MemoryMappedFile.CreateOrOpen("SomeName", 1024);
_mmvs = _mmf.CreateViewStream(INT_OFFSET, 4);
unsafe
{
IntPtr ptr = _mmvs.SafeMemoryMappedViewHandle.DangerousGetHandle();
Interlocked.Increment(ref (*((int*)(ptr + INT_OFFSET)))
}
}
}