2013-12-08 1 views
0

클라이언트/서버 솔루션에 여러 시작 프로젝트가 있습니다. 서버는 콘솔 응용 프로그램이고 클라이언트는 WinForms 응용 프로그램입니다. 중요한 경우 서버/콘솔이 먼저 시작됩니다.Visual Studio에서 여러 시작 프로젝트 간의 교착 상태가 깨짐

이제 서버를 차단하는 일부 동기화 클라이언트 쪽 코드로 인해 교착 상태가 발생합니다. 스레드 동기화는 간단한 lock 문을 사용하여 수행됩니다.

교착 상태가 발생하면 앱이 모두 동결되어 VS에서 일시 중지/중단이 발생하면 클라이언트가 아닌 서버 앱이 중단됩니다. 다음과 같은 두 가지 질문이 있습니다.

  • 여러 프로젝트를 시작할 때 어떤 프로젝트를 탈피 할 수 있습니까?
  • lock 문이 교착 상태에 빠진 경우 해당 개체에 현재 잠금이있는 코드 줄을 찾는 방법이 있습니까?

답변

1

최상의 솔루션은 Visual Studio의 별도 인스턴스에서 클라이언트와 서버를 디버그하고 이에 따라 시작 프로젝트를 설정하는 것입니다.

두 번째 질문에 관해서는 일반적으로 guid를 설정하고 잠금을 만들고 해제 할 때 출력합니다. 이것이 일어나고 있는지보기 위해서. 그렇다면, 나는 중단 점을 설정하고 디버그를보고 스택에서 어디서 전화가오고 있는지 살펴 본다. 이 정보를 얻기 위해 System.Environment.StackTrace를 로그에 출력 할 수도 있지만, 시도한 적이 있습니다.

1

비주얼 스튜디오 2 곳을 사용할 수 있습니다. 하나는 콘솔을 시작하고 하나는 서버를 시작합니다.

정말로 lock 문이 필요한지 확인합니다.

잠그시겠습니까? 항상 독점적 잠금이 필요합니까?

또는 일부 작업은 병렬로 수행 할 수 있으며 독점적 인 작업 만 있습니까?

이 경우 ReaderWriterLockSlim 을 사용하면 교착 상태가 발생할 위험을 줄일 수 있습니다.