C#:如何自动从内存中读取IntPtr到内存中?

时间:2019-01-23 10:20:40

标签: c# .net

我正在这样读取/写入内存中的全局变量:

var old = Marshal.ReadIntPtr(ptr, ofs);
Marshal.WriteIntPtr(ptr, ofs, nwv);

其中ptr是内存中的基本指针,ofs是变量偏移量,旧变量接收当前值,nwv是全局变量的新值。它运作良好,但是我想知道是否有一种原子方式来做到这一点?我知道有Interlocked.Exchange方法,该方法允许切换IntPtrs,但是我不知道如何正确地将ptr + ofs转换为ref IntPtr。 Interlocked.Exchange会自动进行IntPtrs切换吗?

1 个答案:

答案 0 :(得分:0)

您需要一个锁来避免在“原子”动作中间使用另一种C#方法访问该位置。简化:

static object locker = new object();
lock (locker) {
  //read
  //write
}

一次只有一个线程可以锁定locker。争夺该锁的其他线程将被阻塞,直到释放该锁为止。