0

이것은 내 첫 번째 질문이기 때문에 저에게 친절하십시오.다중 코어 환경에서의 데이터 동기화 (Java 기반)

별도의 CPU 코어에서 실행되는 두 개의 스레드 (예 : t1과 t2)가 동일한 시간, 즉 동일한 나노초/프로세서주기의 공유 객체에 동기화 된 메소드를 호출하면 어떻게됩니까? 어떻게 그리고 어떤 요소에 의해 잠금이 해결 되었습니까?

명백한 질문처럼 보일지 모르지만 인터넷에서 아무것도 찾을 수 없습니다. 감사!

+1

google "java 동기화 방법" – jtahlborn

+0

동기화 된 메소드의 경우 하나의 스레드 만 객체를 잠글 것입니다. 당신은 정확하게 말할 수 없습니다. 그것은 jvm에 의해 결정됩니다. 다른 스레드는 잠금이 첫 번째 스레드에 의해 해제 될 때까지 차례를 기다립니다. – Nishant

+2

수퍼 보울에서 화장실 시간을 상상해보십시오. 많은 사람들이 모두 똑같은 것을 원합니다. 가이 A가 다음 라인에 들어가서 들어갑니다. 가이 B는 라인을 자르고 미리 들어 가려고합니다. 'synchronized'는 빅 터프 가이입니다. 빅 터프 가이는 가이 B에게 f를 되찾고 가이 A가 완료 될 때까지 기다리라고합니다. 그리고 그것은 멀티 스레딩입니다. – flavian

답변

0

사양에 따르면 동기화 된 메서드는 한 번에 하나의 스레드에서만 입력 할 수 있습니다. 사용되는 아키텍처 메커니즘은 JVM에 따라 다릅니다.

Oracle HotSpot (거의 모든 사람이 실행하는 JVM)의 경우 : C++ 코드는 GNU이며 아마 당신을위한 답을 갖고있을 것입니다.

하지만 "그냥 작동합니다"라는 보증이 필요한 경우 사양에서 제공합니다.

+0

고마워, 그게 내가 찾고 있던 대답이야. –

1

요즘은 실제로 하드웨어에서 구현되므로 프로세서는 한 스레드에 많은 액세스 권한을 부여하는 특별한 지시를받습니다. 이것은 지난 세기의 순수한 소프트웨어 기반의 솔루션에서 발전해 왔으며 요즘은 최첨단 기술로 AtomicInteger가 표현합니다 : 변경 가능한 단일 정수로, 스레드로부터 안전하지만 결코 차단되지 않습니다.

예 : Intel Haswell Architecture.

관련 문제