0

허용 답변 방지 대칭 특성 등에 의해 지적 보유 답변, 의견과 jls-17.4.2이 발생합니까?

1)보고 후 - user3707125

2) 잠금 장치 사이의 HB 관계는, 잠금 해제 및 HB 잠금 (UL 사이에 실제로 l) hb (l, ul)과 같지 않음. JSL에서 shmosel
- -에 의해 암시

는 모니터가 발생-이전에 그 모니터의 모든 후속 잠금 해제. 제임스 대형하여 HB의

3) 합리적인 설명


실제 질문을했다 : 자바 메모리 모델 (JMM)이 설명

여러 행동 사이의 관계 이전에 발생. "x"와 "y"가 그들 사이에 h (x, y) 관계를 갖는 두 개의 액션 인 경우. JMM은 또한 "x"와 "y"를 순차적으로 실행하는 것과 동일한 결과를 얻는다면 구현 (컴파일러, 런타임 또는 하드웨어)이 자유롭게 이러한 실행을 다시 지정할 수 있다고 명시합니다.

그래서 내가 바로 그

hb(x,y) != hb(y,x) 

암 I 생각? 또는 나는 무엇인가 놓쳤 느냐?

업데이트 :
또한 잠금을 포함하는 동작에 대해 어떻게 hb 관계를 설정할 수 있습니까? 서로 다른 스레드에 의한 잠금 이벤트는 프로그램 순서에 의해 정의 될 수 없으며 결정적이지 못하며 명령 및 스케줄러와 같은 여러 요소에 따라 달라집니다.
그래서 두 잠금 동작 사이 - l1과 l2 관계 hb 정의 방법 (l1, l2) 또는 hb (l2, l1)로 표시된다. 둘 다 받아 들일 수 있습니다. 이 경우 둘 다 평등 해 보입니다.
l1과 l2는 동일한 개체에 대한 잠금 작업입니다. L1과 L2는 잠금

(주석 기준) 명확화 없습니다 : 다른 스레드가 동일한 개체에서 수행하는 것입니다 잠금 때 잠금 조치를 확실히 상호 배타적입니다.

+0

https://en.wikipedia.org/wiki/Happened-before - "모든 엄격한 부분 명령과 마찬가지로 일어난 관계는 전이적이고 비관적이며 ** 반대로 **" – user3707125

+2

왜 동일할까요? * x *가 * y *보다 먼저 발생하면 분명히 * y *는 * x * 앞에 나오지 않습니다. – shmosel

+0

나는 일반적인 의미로 위키에서 지적한대로 둘 다 옳다는 것을 알 수있다. - hb는 반 비대칭이다.그러나 일반적으로 많은 경우와 JMM 작업에서 차이점이 없으며 잠금 장치는 동작으로 간주됩니다. 자물쇠 사이에는 관계가 성립되지만 질서는 성립하지 않습니다. 희망을 갖고 나는 옳다. – samshers

답변

0

예. 구현은 합리적인 한도 내에서만 조작 순서를 변경할 수 있습니다. 은 Java 언어 사양 (JLS)에 정의 된 관계가 구체적으로 재정렬 할 수있는 범위를 정의하기 전에 발생합니다.

x가 y보다 먼저 발생한다고하면 x가 발생하기 전에 y가 나타나는 모양을 만들 수있는 이 아닌의 순서가 허용됩니다.

+0

주문이 중요하지 않은 것으로 보이는 행동이있는 것처럼 보입니다. 동일한 내용을 반영하도록 질문을 업데이트했습니다. 고마워. – samshers