由于独立并发写入共享内存而导致的问题

由于独立并发写入共享内存而导致的问题

实际上我想知道独立并发写入共享内存引起的问题。

更详细地说,假设我们有三个进程(proc1、proc2、proc3)。这3个进程正在尝试使用基于共享内存IPC的环形缓冲区。当 proc1 对环形缓冲区进行并发写入并获取锁时,等待该锁的 proc2 和 proc3 会发生什么情况。 proc1 显然会阻止 proc2 和 proc3,阻止它们的其他活动。

谁能帮我解释一下,我们在上述场景中面临的所有问题是什么,以及什么是有效的解决方案?

提前致谢!

答案1

这三个进程的问题是它们可能会破坏彼此的数据。您的环形缓冲区有一个读取索引变量、一个写入索引变量以及 10 个位置。

假设索引变量指向位置 #4。

假设进程 1 想要添加到缓冲区。因此,进程一检索写入索引变量,将其数据写入位置 4,并递增写入索引,因此现在为#5。到目前为止,一切都很顺利。

现在进程 2 和 3 都想添加到缓冲区中。进程 2 检索写入索引并看到#5。进程 3 检索写入索引并且还看到#5。然后进程 2 将其数据写入位置 5,但该数据立即被进程 3 销毁(毕竟它看到了相同的位置!)最后,进程 2 和 3 都递增了写入索引。根据时间和您的具体实现,写入索引可能最终为 6 或 7。

此问题的一种解决方案是使整个操作原子化 - 这意味着进程 3 在进程 2 完成之前无法在环形缓冲区上执行任何操作。这就是锁的作用。

相关内容