2016-06-10 1 views
2

나는 akka documentation을 읽었으며 지금은 비 차단 보장에 관한 섹션에 있습니다.기아 자유 및 대기없는 방법 이해

방법은 대기가없는 모든 호출이 단계의 유한 수에 완료 보장되는 경우입니다 : 여기에 (강조 광산)라고하는 것이다. 각 참여자가 유한 한 단계 ( 통화가 끝날 때) 후 진행할 수

[...]

대기없는 방법 기아 무료이다.

강조하는 것이 분명하지 않습니다. 기아는 참가자가 진전이 불가능하기 때문에 문서의 앞 부분에 정의되어 있습니다 (일부는 굶어 죽었습니다).

이제 여러 스레드가 동일한 wait-free 메서드를 호출하면 굶주릴 수 없습니다. 방법이 차단되고 대기 상태가 아니더라도 절대로 절대로 침입하지 않는다는 뜻입니까? 나는 wait-free 방법에 대한 정확한 세부 사항을 그릴 수 없다.

예를 들어, 메소드가 블록 I/O 메소드를 호출하는 경우 대기 상태입니까? 나는 아니오라고 말하고 싶습니다. 그렇지 않습니다. 하지만 하나 이것에 대해 :

public class MyClass{ 

    private static Object mutex = new Object(); 
    private int sharedInt = 0; 

    public void isItWaitFree(){ 
     synchronized(mutext){ 
      ++sharedInt; 
     } 
    } 

    //The rest 
} 

나는 한 시간의 무기한 긴 금액에 대한 mutex acquision을 포함 할 수 있기 때문에는 //The rest에 따라 달라집니다 말하고 싶지만.

진정한 대기없는 방법의 예는 무엇입니까?

UPD : 나는 WIAT 자유 방법은 AtomicXxx 클래스와 같은 비 차단 기술을 사용하거나 우리가 mutex 시간 유한 양 개최 보장 할 수있는 경우에 사람이 있다고 가정합니다.

+0

"메서드가 블로킹 및 대기"메서드가 둘 다일 수 있습니까? – Raedwald

+0

wait-free _method_와 같은 것은 없습니다. 대기 자유는 _ 알고리즘 _의 특성입니다. 흔히 전체 알고리즘은 단일 메소드 내에 포함되지만 항상 그런 것은 아닙니다.isItWaitFree()의 "wait freedom"이'//나머지 '에 의존한다면, 아마도'나머지 //'는 같은 알고리즘의 일부라는 것을 의미합니다. –

답변

2

나의 이해를 돕기 위해 wait-freedom는 함수/메소드뿐만 아니라 실행될 환경의 속성입니다. 기아 인해이

  • 만 스케줄링 방식의 경우 대기 작업의 유효 우선 순위가 점차 여기서 자유 기다려야 만 비 차단 방법에 대한
    1. 을 달성 할 수있다 "불공정"스케줄링 알고리즘, 일어날 수 있기 때문에 대기열의 맨 위로 올라갈 때까지 자신의 대기 시간에 비례하여 올랐고 자신의 직업을 완료 할 수있는 기회가 주어졌습니다.

    UPDATE : 그것은 별도로 같은 작업을 예약 할 수 있도록

    또는 방법의 대기 자유 속성/권한은 어떻게 든, 스케줄러에 노출 될 수 있습니다.