자바 기술 동시 프로그래밍 (3) 원자 동작의 원리

원자 연산의 원리

원자 (원자)을 의미하는 원자 동작 (작업 원)는 "작은 입자가 추가로 분할 될 수없는"의도 "중단 또는 일련의 동작 될 수 없습니다." 다중 프로세서에 구현 원자 작업은 다소 복잡해진다. 인텔 프로세서와 자바하자 채팅, 원자 작업을 달성하는 방법이다.

원자 연산 처리를 달성하는 방법

(1) 상기 버스 키 보장 자성을 이용하여
다수의 프로세서가 동시에 (++ i)를 수정 기록 동작 공유 변수를 판독하는 경우, 상기 공유 변수는 동시에 동작하는 복수의 프로세서가 될 것이다, 따라서 판독 원자 덮어 쓰기 동작은 동작 아니다 값 완료 후 공유 변수를 일치 기대.
그림 삽입 설명 여기
버스 키는 다른 프로세서를 요청하는 버스상의 신호가 실시간 차단되며,이 프로세서에 출력하고, 상기 프로세서는 배타적으로 공유 메모리 일 수있는 프로세서가 제공하는 LOCK # 신호를 사용하는 것이다.
(2) 캐시 잠금 보증 자성을 사용.
잠금 캐시 메모리 영역은 잠금 작업을 수행하는 동안 캐시 라인 프로세서에서 캐시 및 잠긴 경우, 그는 다시 메모리에 기록 잠금 작업을 실행 한 수단이 프로세서는 버스 고백 LOCK # 신호가 아니라 내부를 수정 그의 캐시 일관성 메커니즘 메모리 어드레스 원자 작동을 보장한다.
캐시 일관성
다른 프로세서 라이트 - 백 데이터 캐시 라인이 잠긴 상태 데이터가 동시에 둘 이상의 프로세서 캐시에 의해 메모리 영역을 수정되지 않도록, 상기 캐시 라인이 무효한다.

원자 작동 수단 및 잠금 CAS 사이클 모드에 의해 달성 될 자바

CAS 사이클 원자 연산을 사용하여 구현

동시 시작 JDK1.5 패키지 (AtomicInteger의) 원자 작업을 지원하는 클래스를 제공합니다

원자 작업의 세 가지 주요 이슈를 달성 CAS

(1) ABA 문제
CAS의 가치가 작업에 필요한 시간, 값을 확인이 변경되었습니다 ABA 값이 변경되지 않는 것을 발견 할 것이다 CAS 있지만, 사실은 검사 중에 변경. 솔루션 ABA 문제는 버전 번호를 사용하는 것입니다. 버전에서는 숫자 변수 앞에 첨가하고, 변수마다 업데이트 버전 번호 더하기 1은 다음 ABA가 된다 1A-2B.. 3A-
2 사이클 타임 오버 큰 긴
스핀 시간 CAS 경우 실패 윌 좋은 실행 오버 헤드를 가지고 CPU.
(3) 만 공유 변수 원자 동작을 보장 할

잠금 메커니즘은 원자 동작을 달성

단지 스레드의 메모리 영역은 잠금을 획득하는 잠금 메커니즘 보장하지만은 잠금 장치를 작동 할 수 있습니다. 내부 JVM의 잠금 장치는 많은 바이어스 잠금, 잠금 및 경량 뮤텍스를 달성했다. 바이어스 잠금 외에도, JVM 잠금 방법은 스레드가 잠금을 해제하기 위해 CAS 사이클을 사용하는 경우가 동기화 블록을 종료 할 때 잠금을 얻기 위해 CAS주기 방법을 사용하는 경우 동기화 된 블록을 입력하고자 인 CAS 사이클과 모두를 달성했다.

게시 24 개 원래 기사 · 원 찬양 1 · 조회수 548

추천

출처blog.csdn.net/qq_45366515/article/details/105121188