나는 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
시간 유한 양 개최 보장 할 수있는 경우에 사람이 있다고 가정합니다.
"메서드가 블로킹 및 대기"메서드가 둘 다일 수 있습니까? – Raedwald
wait-free _method_와 같은 것은 없습니다. 대기 자유는 _ 알고리즘 _의 특성입니다. 흔히 전체 알고리즘은 단일 메소드 내에 포함되지만 항상 그런 것은 아닙니다.isItWaitFree()의 "wait freedom"이'//나머지 '에 의존한다면, 아마도'나머지 //'는 같은 알고리즘의 일부라는 것을 의미합니다. –