gpt4 book ai didi

java - 如何在读取时阻止线程对数组的写访问

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:30 25 4
gpt4 key购买 nike

我有两个并行运行的线程,为了获取有关其内部结果的信息,我创建了长度为 8 的 int 数组。相对于它们的 id,它们可以更新 status 数组上的相对区域。他们不可以写其他区域。此外,为了正确获取和显示 status 数组,我尝试编写 getStatu 方法。在得到结果的同时,我想阻止其他人写入statu数组;不幸的是,当我在 getStatu 方法中获取和显示结果时,我不知道如何阻止其他人写入 status 数组。怎么办?

注意:如果有部分引起误解,请告诉我 friend ,我会修复

class A{
Semaphore semaphore;
int [] statu; // statu is of length 8

void update(int idOfThread, int []statu_){
try {
semaphore.acquire();
int idx = idOfThread * 4;

statu[idx] = statu_[0];
statu[idx+1] = statu_[1];
statu[idx+2] = statu_[2];
statu[idx+3] = statu_[3];
} catch (...) {

} finally {
semaphore.release();
}
}

int[] getStatu(){
// Block write access of threads
// display statu array
// return statu array as return value
// release block, so threads can write to the array

}
}

最佳答案

除了使用 Semaphore 之外的另一种锁/SNC 机制之外,只是一个改进的建议。

将两个 status[4] 数组放入单个数组 [8] 并不是最佳解决方案。考虑任务 A 写入其四元组:它必须锁定任务 B 读取相同内容,但锁定任务 B 写入 B 的四元组是没有意义的,反之亦然。

一般来说,锁定内容的粒度是一个重要因素:锁定整个数据库是无意义的(除了像备份这样的整体处理),但是锁定记录的各个字段会产生过多的开销。

关于java - 如何在读取时阻止线程对数组的写访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24587420/

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