따르면 클래스 article 다음 스레드로부터 안전하지 않습니다를 만듭니다SynchronizationAttribute.SUPPORTED 동기화 내용
[Synchronization]
public class Deadlock : ContextBoundObject
{
public DeadLock Other;
public void Demo() { Thread.Sleep (1000); Other.Hello(); }
void Hello() { Console.WriteLine ("hello"); }
}
public class Test
{
static void Main()
{
Deadlock dead1 = new Deadlock();
Deadlock dead2 = new Deadlock();
dead1.Other = dead2;
dead2.Other = dead1;
new Thread (dead1.Demo).Start();
dead2.Demo();
}
}
그것은 않습니다
과 :
나의 이해에 따라 동안 잠금에 들어간 코드가 서로 다른 동기화 내용이 그것은 괜찮습니다. 하지만 설정하여 동기화 속성으로 플레이하기로 결정
[Synchronization(SynchronizationAttribute.SUPPORTED)]
SUPPORTED
의미 :
가 다른 동기화 객체에서 인스턴스화 경우 기존의 동기화 컨텍스트를 조인, 그렇지 않으면 동기화 남아
이후 콘솔 응용 프로그램에 동기화 내용이 없습니다. 두 객체 모두 동기화 객체가없고 교착 상태에 빠지지 않아야합니다. 그러나 나는 여전히 교착 상태에 처해있다. 왜?
또한 [Synchronization]
속성을 제거했습니다. 여전히 교착 상태입니다. 어떤 영향을 받아 [Synchronization]
속성이 거부됩니까?
당신이? ... 당신은 내가이 문제를 재현 할 수없는 순환 종속성 –
를 만드는 것을 얻고있다 ... 오랫동안 코드를 실행하면 곧 stackoverlfow 예외를 얻을 것이다. SUPPORTED와'[Synchronization]이 없다면 교착 상태가 없다. – Evk
시간 초과가 너무 길기 때문에 오버플로가 발생하지 않습니다. 그러나 아이디어를 얻었고 대답을 받아 들일 준비가되었습니다. – vico