개체의 2D 배열에서 두 요소의 원자 적 업데이트를 수행해야합니다. 개체는 배열에 위치 (x, y)에 항목을 저장할 수 있는지 여부와 어떤 형식인지 이미 저장되어 있는지 여부를 나타냅니다. 따라서 객체 자체는 변경되지 않지만 내부 상태는 변경됩니다.배열의 2 요소에서 동기화 Java
for (int i = 0; i < storage.length; i++) {
synchronized (storage[i][j]) {
synchronized (storage[i+1][j]) {
if (storage[i][j].isfree() && storage[i+1][j].isfree())
return (storage[i][j].store(true)&&storage[i+1][j].store(true));
}
}
synchronized (storage[i][j]) {
synchronized (storage[i][j+1]) {
if (storage[i][j].isfree() && storage[i][j+1].isfree())
return (storage[i][j].store(true)&&storage[i+1][j+1].store(true));
}
}
}
}
내가 복용 항목을 저장할 수있는 (무료 슬롯을 찾고 배열을 반복하고있다 : 나는 현재 2 중첩을 사용하고
내가 배열의 두 요소에 대한 액세스를 동기화하고있는 문을 동기화 두 슬롯을 동기화) 두 개의 동기화 된 블록을 무조건 입력하십시오. 두 번째 블록 안에 배열의 두 슬롯이 비어 있는지 확인합니다. 그러면 새 항목을 저장합니다. 그렇지 않으면 다음 배열 요소로 이동합니다.
제 질문은이 작품입니까? 여러 스레드에서이 코드를 실행하면 업데이트가 원본이 될 것입니다. 또는 동일한 결과를 얻는 더 좋은 방법이 있습니다. 하지만 대부분 내 질문은 첫 번째 질문입니다.
도움 주셔서 감사합니다.
왜이 용도로 배열을 사용하고 있습니까? – Kayaman
두 명의 다른 자식을 보유하고있는 객체를 만드는 것이 어떻습니까? – Lino
각 저장소 (하나 또는 둘)가 항목을 보유 할 수있는 저장소에 많은 슬롯이 있습니다. 몇몇 품목은 2 개의 구멍을 점유하는 1 개의 구멍을 점유한다. 따라서 어떤 경우에는 두 개의 슬롯에서 동기화해야 할 필요가 생깁니다. –