이렇게 이해하면 될까요?
484
bae5445
작성한 질문수 15
1
안녕하세요. 제가 이해한 대로 적어봤는데 한번 읽어보시고 잘 이해했는지 확인해주셨으면 감사하겠습니다
메인에서 쓰레드 1, 2가 동시에 실행이 되서 WaitAll(t1, t2);에 의해 쓰레드 두 개가 끝날때까지 WaitAll에서 기다리게 된다. 쓰레드1, 2가 동시에 Test()를 호출하게 되면, SessionManager의 _lock과 UserManager의 _lock이 동시에 락이 되어 버린다. 이 상태에서 각자 TestSession(), TestUser()를 호출하게 되는데, 이 시점에서 SessionManager와 UserManager의 _lock은 이미 락이 된 상태이기 때문에 _lock이 풀릴때까지, 즉 Test() 함수에서 lock{} 블록이 끝날때까지 대기한다. 하지만 서로 _lock 클래스 멤버변수가 lock되어 있는 상태이기 때문에, 서로 lock {}문을 빠져나올 때까지 무한히 기다리는 상황이 벌어지게 된다. 만약 t1.Start()만 호출하게 되면 SessionManager의 Test()가 호출하게 되고, UserManager의 TestUser()가 호출하게 된다. 이떄는 UserManager의 lock이 락되지 않은 상태이기 때문에 Console.WriteLine이 호출되고 lock을 빠져나오며 SessionManager.Test()도 무사히 나오게 되어 Main을 끝내게 된다.
답변 1
TLS 질문드립니다.
0
44
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
48
2
Unity Span
0
76
2
XML, Dll 차이점
0
105
2
Session 질문입니다
0
80
1
Write Read 커서 키워드
0
76
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
70
2
네트워크 Send 전담 스레드 배치
0
98
2
UnhandledException 으로 서버 터지는 경우
0
86
2
컨텐츠 단, 엔진 단
0
106
1
질문 있습니다
0
77
2
C# 게임서버 3D MMORPG
0
147
2
유니티6 버전
0
98
2
receive하는 부분과 send하는 부분의 차이
0
134
2
커서의 위치의 중요성
0
103
2
C++ 전혀 모르는데 C# 서버
0
170
2
강의에 질문이 있습니다
0
86
2
멀티스레드 이해도 질문
0
95
1
500 vs 500
0
130
3
OnAcceptHandler 액션 함수
0
61
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
193
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
83
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
106
1
스핀락 질문.
0
110
2





