我有一个相对简单的案例,其中:
棘手的部分是更新需要“原子地”发生,以便它不会从本地状态读取,例如,只写入了一半的更新。状态不限于使用原语,并且可以包含任意类 AFAICT atm,因此我无法通过使用
Interlocked
之类的简单方法来解决它。原子操作。我计划在自己的线程上运行每个任务,所以在这种情况下总共有两个线程。为了实现这个目标,我想使用双缓冲技术,其中:
这是这个想法的一般要点,但实际的实现当然会有所不同。
我试图查找这是否是一个常见的解决方案,但实际上找不到太多信息,所以我想知道以下事情:
我几乎觉得我已经陷入了一个死胡同,我找不到(因为我不知道要搜索什么)更多的资源和信息来查看这种方法是否“好”。我计划用 .NET C# 编写它,但我认为这些技术和解决方案可以翻译成任何语言。所有的见解都表示赞赏。
最佳答案
如果我理解正确,写入本身是同步的。如果是这样,那么也许不需要保留两个副本,甚至不需要使用锁。
也许这样的事情可以工作?
State state = populateInitialState();
...
// Reader thread
public State doRead() {
return makeCopyOfState(state);
}
...
// Writer thread
public void updateState() {
State newState = makeCopyOfState(state);
// make changes in newState
state = newState;
}
关于c# - 使用双缓冲技术进行并发读写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67893189/