gpt4 book ai didi

java - 使用Java编程安全/常规/原子寄存器

转载 作者:行者123 更新时间:2023-12-03 12:55:48 29 4
gpt4 key购买 nike

我的问题与“多处理器编程的艺术”一书有关。第4章介绍安全/常规/原子寄存器及其实现。

以下是安全多读取器单写 boolean 寄存器的以下实现,该寄存器基于安全单读取器单写 boolean 寄存器,被视为“可用”。

public class SafeBooleanMRSWRegister implements Register<Boolean> {
boolean[] s_table; // array of safe SRSW registers
public SafeBooleanMRSWRegister(int capacity) {
s_table = new boolean[capacity];
}
public Boolean read() {
return s_table[ThreadID.get()];
}
public void write(Boolean x) {
for (int i = 0; i < s_table.length; i++)
s_table[i] = x;
}

问题是:

1)这个神秘的“单读者单作者”居住在哪里?书中没有任何实现。

2)为什么我们需要这种基于数组的MRSW寄存器实现?为什么通常的SRSW失败?为什么此数组可以保证某些内容-因为我们假设如果两个线程开始写入,则由于该周期它们将分别写入每个SRSW?但是在Java中不能保证。

3)该寄存器被认为是安全的,不是常规的。为什么不定期?我们如何看到与先前和正在进行的写入不同的任何值?

4)如果读/写调用没有重叠,则安全,常规或原子寄存器应始终返回最后写入的值。但是在本书的代码示例中,这是无法实现的,因为在Java中,我们需要一个内存屏障来保证这一点。
而且,如果我们在寄存器的字段中使用“volatile”关键字,那么据我所知,它对于所有字段类型都是原子的,除了long和double之外,包括任意用户类型。因此,对于易变魔术,我们根本不需要此代码。

可能我只是想漏掉了全部内容,而这些示例不是真正的代码,而是有关硬件工作原理的一些想法?

最佳答案

那本书的第一部分(包括第四章)主要是理论。当他说“注册”时,他说的是一种数学抽象,或多或少地与大多数计算机系统上的内存工作方式相对应。本章试图从数学上证明多处理器硬件必须提供的最起码的保证,以便我们构建可证明正确的多线程软件系统。

在该章中使用的术语“安全”,“常规”和“寄存器”在数学上均具有非常具体的含义。含义均在本文中进行了解释。您只需要仔细阅读它,然后尝试完成一些练习即可。

不要期望您在第I部分中读到的所有内容都可以在Java中实现,也不要期望第I部分中的任何内容都可以在实际程序中使用。在第二部分中,您可以开始找到第一部分描述的理论的实际应用。

关于java - 使用Java编程安全/常规/原子寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728948/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com