.NET에서 잠금에 대해 팀원과 토론했습니다. 그는 저수준 및 고수준 프로그래밍 모두에서 광범위한 배경을 가진 정말 밝은 사람이지만, 저수준 프로그래밍에 대한 그의 경험은 내 것을 훨씬 능가합니다. 어쨌든 그는 시스템을 충돌시키는 "좀비 스레드"의 작은 가능성을 피하기 위해 가능한 한 과부하가 걸리는 중요한 시스템에서는 .NET 잠금을 피해야한다고 주장했다. 나는 일상적으로 잠금을 사용하고 "좀비 실"이 무엇인지 몰랐기 때문에 물었다. 내가 그의 설명에서 얻은 인상은 좀비 스레드가 종료되었지만 어떻게 든 여전히 일부 리소스를 보유하고있는 스레드라는 것입니다. 그가 좀비 스레드가 어떻게 시스템을 중단시킬 수 있는지에 대한 예는 스레드가 어떤 객체를 잠근 후에 어떤 절차를 시작한다는 것입니다. 그런 다음 잠금이 해제되기 전에 어느 시점에 종료됩니다. 이 상황에서는 시스템이 중단 될 가능성이 있습니다. 결국 해당 메소드를 실행하려고하면 잠긴 오브젝트를 사용하는 스레드가 종료 되었기 때문에 스레드가 리턴되지 않는 오브젝트에 대한 액세스를 모두 대기하게됩니다.
나는 이것의 요지가 있다고 생각하지만, 내가 기지에서 벗어나면 알려주십시오. 이 개념은 나에게 이해가되었다. 이것이 .NET에서 발생할 수있는 실제 시나리오라는 것을 완전히 확신하지 못했습니다. 이전에는 "좀비"에 대해 들어 본 적이 없지만 저수준에서 깊이 작업 한 프로그래머는 스레딩과 같은 컴퓨팅 기본 사항에 대해 더 깊이 이해하는 경향이 있음을 알고 있습니다. 나는 확실히 잠금의 가치를 보았고 많은 세계적인 프로그래머들이 잠금을 사용하는 것을 보았습니다. 나는 또한 그 lock(obj)
진술이 실제로 구문 설탕 이라는 것을 알고 있기 때문에 이것을 스스로 평가하는 능력이 제한적 입니다.
bool lockWasTaken = false;
var temp = obj;
try { Monitor.Enter(temp, ref lockWasTaken); { body } }
finally { if (lockWasTaken) Monitor.Exit(temp); }
때문 Monitor.Enter
및 Monitor.Exit
표시됩니다 extern
. .NET은 이러한 종류의 영향을 미칠 수있는 시스템 구성 요소에 대한 노출로부터 스레드를 보호하는 일종의 처리를 수행 할 수 있지만 순전히 추측 적이며 아마도 "좀비 스레드"에 대해 들어 본 적이 없다는 사실을 기반으로합니다. 전에. 따라서 여기에 대한 의견을 얻을 수 있기를 바랍니다.
- 여기서 설명한 것보다 "좀비 스레드"에 대한 명확한 정의가 있습니까?
- 좀비 스레드가 .NET에서 발생할 수 있습니까? (왜 왜 안돼?)
- 해당되는 경우 .NET에서 좀비 스레드를 작성하려면 어떻게해야합니까?
- 해당되는 경우 .NET에서 좀비 스레드 시나리오에 영향을주지 않으면 서 잠금을 어떻게 활용할 수 있습니까?
최신 정보
나는 2 년 전에이 질문을 조금했다. 오늘 이것은 일어났다 :
wait
나 waitpid
. 그런 다음 자식 프로세스를 "좀비 프로세스"라고합니다. 참조 howtogeek.com/119815