Java 理解原子多读多写寄存器的实现
我正在研究原子多读多写寄存器的以下实现:Java 理解原子多读多写寄存器的实现,java,multiprocessing,atomic,theory,multicore,Java,Multiprocessing,Atomic,Theory,Multicore,我正在研究原子多读多写寄存器的以下实现: public class AtomicMRMWRegister<T> implements Register<T>{ private StampedValue<T>[] a_table; // array of atomic MRSW registers public AtomicMRMWRegister(int capacity, T init) { a_table = (StampedVal
public class AtomicMRMWRegister<T> implements Register<T>{
private StampedValue<T>[] a_table; // array of atomic MRSW registers
public AtomicMRMWRegister(int capacity, T init) {
a_table = (StampedValue<T>[]) new StampedValue[capacity];
StampedValue<T> value = new StampedValue<T>(init);
for (int j = 0; j < a_table.length; j++) {
a_table[j] = value;
}
}
public void write(T value) {
int me = ThreadID.get();
StampedValue<T> max = StampedValue.MIN_VALUE;
for (int i = 0; i < a_table.length; i++) {
max = StampedValue.max(max, a_table[i]);
}
a_table[me] = new StampedValue(max.stamp + 1, value);
}
public T read() {
StampedValue<T> max = StampedValue.MIN_VALUE;
for (int i = 0; i < a_table.length; i++) {
max = StampedValue.max(max, a_table[i]);
}
return max.value;
}
}
public class StampedValue<T> {
public long stamp;
public T value;
// initial value with zero timestamp
public StampedValue(T init) {
stamp = 0;
value = init;
}
// later values with timestamp provided
public StampedValue(long stamp, T value) {
stamp = stamp;
value = value;
}
public static StampedValue max(StampedValue x, StampedValue y) {
if (x.stamp > y.stamp) {
return x;
} else {
return y;
}
}
public static StampedValue MIN_VALUE = new StampedValue(null);
}
公共类AtomicMRMWRegister实现注册{
private StampedValue[]a_table;//原子MRSW寄存器数组
公共原子MRMWregister(int容量,T初始){
a_表=(StampedValue[])新的StampedValue[容量];
StampedValue=新的StampedValue(初始);
对于(int j=0;jy.stamp){
返回x;
}否则{
返回y;
}
}
公共静态StampedValue最小值=新StampedValue(null);
}
摘自教科书《多处理器编程的艺术》,第86页
当他们声明
a_table
是一个原子MRSW寄存器时,他们的意思是什么?当其类型为StampedValue
时?发布代码而不是代码的图像。@PrafullaKumarSahu完成。不是我的代码,因为添加您的代码实际上让人们可以从这里复制并在他们的环境中运行,这样他们就可以在发布到这里之前测试他们的解决方案。如果此代码是多线程安全的,那么它的失败是可怕的。StampedValue是否在本书的另一部分中定义?看起来它使用StampedLock或AtomicStampedReference作为MRSW的锁定机制。发布您的代码,而不是代码的图像。@PrafullaKumarSahu done。不是我的代码,因为添加您的代码实际上让人们可以从这里复制并在他们的环境中运行,这样他们就可以在发布到这里之前测试他们的解决方案。如果此代码是多线程安全的,那么它的失败是可怕的。StampedValue是否在本书的另一部分中定义?看起来它使用StampedLock或AtomicStampedReference作为MRSW的锁定机制。