2

Java에서 중요한 영역을 어떻게 감지합니까? 두 개의 원자 프로세스를 사용하여 상호 배제를 구현하는 것이지만 이것이 중요한 영역인지 판단하기 위해 찾는 일반적인 사항은 무엇인지 이해합니다.Java에서 중요한 영역을 탐지하는 방법은 무엇입니까?

내가 아는 매우 궁금 여부 :

  • 자바 중요한 지역의 모든 동기화 방법?

  • 은 Java의 동시 시스템에서만 발견되는 중요한 영역입니까?

+1

"단지 자바에서 동시 시스템으로 볼 수있는 중요한 지역이 있습니까?" ** ** 당신은 어떻게 ** "중요한 지역"을 정의하겠습니까? 시스템이 "동시"가 아닌 경우 - 시스템이 어떻게 그 정의를 충족시킬 수 있습니까? – Fildor

+0

중요한 부분은 정의하는 부분입니다. 스레드 안전성 관점보다는 성능에서 중요한 임계 영역을 가질 수 있습니다. –

+0

당신은 그들을 감지하지 못합니다. 너 * 디자인 *. 네가 묻고있는 것이 불분명하다. – EJP

답변

0

당신은 어떤 값이 여러 스레드간에 공유되어 있는지 확인해야합니다 유스 케이스 끊으면 값이,이 스레드를 설정하거나 얻을 수 있지만 경우 네는 "손상"것으로 간주 할 수있는 경우 인해 손상된 값 그것의 중요한 영역을 잠급니다. 동시성

2

Critical Section 단순히 한 스레드가 어떤 다른 또는 하나의 스레드가에 쓰려고 같은 메모리에 기록 될 때 메모리로부터 /로 판독/기록 할 수있는 코드 부분 인 다른 스레드가 같은 메모리에서 읽을 때의 메모리.

요약

  • Thread1이 - 쓰기 | 스레드 2 - 쓰기 | 안전성 - 아니요

  • 스레드 1 - 쓰기 | 스레드 2 - 읽기 | 안전성 - 아니요

  • 스레드 1 - 읽기 | 스레드 2 - 쓰기 | 안전성 - 아니요

  • 스레드 1 - 읽기 | 스레드 2 - 읽기 | 안전성 -

즉, 그들은 우리가 그 위에 적절한 control을 구현하지 않는 경우는 가능한 오류/고장을 일으킬 수있는 우리의 프로그램 섹션입니다. (예 : 잠금 장치, 세마포어, 장벽 등)

그리고 Java에만 적용되는 것은 아닙니다. 스레드를 지원하는 모든 프로그래밍 언어에 적용됩니다.

+1

+1, 나는 이것이 동시성 프로그래밍의 공식 용어라는 것을 몰랐다. https://en.wikipedia.org/wiki/Critical_section (비록 그것이 OP가 말한 것처럼 지역보다는 섹션이라 할지라도). 두 번째 질문에 대해서는 특히 Java에 대한 질문은 확실하지 않지만 "동시 시스템에서 중요한 영역은 무엇입니까?"라고 대답 할 수 있습니다. 그러나이 질문은 parrallel 프로그래밍에만 관련된 것이므로 분명히 대답은 분명합니다. – Asoub

+0

@Asoub 예. '비판적'이라는 단어는 사용 된 문맥에 따라 다른 해석을 가질 수 있습니다. 나는 방금 동시 프로그래밍의 맥락에서 그것이 무엇을 의미하는지 언급했다. :)) 그리고 소스에 대한 thnx, 나는 내 대답에 그것을 추가했습니다. :)) –

2

Java 중요 영역의 모든 동기화 된 메소드는 무엇입니까?

뿐만 아니라 synchronized 방법/블록, 코드가 너무 중요 지역 (구역) 임계 영역 회로 텔레비전

여러 가지 방법을 보호 Lock API를 사용하여.

1.동기화 방법 :

public synchronized void incrementCounter(){ 
    ++counter; 
} 

2. 동기화 문

public int getCounter(){ 
    synchronized(this){ 
     return counter; 
    } 
} 

3. 잠금 API

class X { 
    private final ReentrantLock lock = new ReentrantLock(); 
    // ... 

    public void m() { 
    lock.lock(); // block until condition holds 
    try { 
     // ... method body, which is critical section 
    } finally { 
     lock.unlock() 
    } 
    } 
} 

유용한 SE 질문 :

,454,551,921,182,914,563,210

Avoid synchronized(this) in Java?

은 중요한 영역은 자바에서 동시 시스템으로 볼 수있는 전용?

아니요. 다른 언어에서도 찾을 수 있습니다.

관련 SE 질문 :

C# version of java's synchronized keyword?

Does PHP have the equivilant to Java 'synchronized' , or is this not required?