메모리 배리어 질문
335
24 câu hỏi đã được viết
질문이 있습니다.
1. 코드가 원래 함수안에서 순차적으로 위에서 아래로 실행되는걸로 알고 있는데 멀티쓰레드 환경에서만 이러한 현상이 생기는 건가요?
2. 쓰레드 실행순서에 궁금합니다.
그 두번째 예제에 쓰레드 t1 쓰레드 t2 를 만들고
t1.start() 먼저 시작하고 그 다음t2.start()하면
쓰레드 t1이 A()함수 실행 다하고
쓰레드 t2가 B()함수를 실행하는 방식인가요?
아님 동시에 실행되는 방식인가요?
만약 동시에 실행되면 꼬이지 않을까요?
a함수는_answer=123을 넣고
b함수는 _complete를 체크하면
b함수는 _answer을 출력못하는데
제가 잘못 이해하고 있나요?
Câu trả lời 3
2
네 물론 타이밍상 if (_complete)가 false라서 넘어가면 출력을 못할 수도 있습니다.
여기서 포인트는 설령 if (_complete)에 들어와서 Console.WriteLine까지 들어왔떠라도
놀랍게도 _answer 값이 123이 아닌 값으로 출력될 수 있다는 것입니다.
물론 이론적으로는 그렇긴 한데, 인텔이나 대부분의 환경에선 확인하기 힘듭니다.
1
1.
실제 실행 순서는 멀티쓰레드 여부와 무관하게 멋대로 바꿀 수 있습니다.
즉 여태껏 속고 사셨던 것이죠.
다만 그게 티가 안 났던 이유는, 아주 무모하게 막 바꾸진 않고
싱글쓰레드 기준으로 코드 로직을 뒤바꿔도 '티가 안 나는' 부분만 바꾸기 때문입니다.
2.
동시에 실행됩니다. 그게 멀티쓰레드의 묘미죠.
동시에 실행된다고 딱히 문제가 항상 일어나는 것은 아닙니다.
a 함수가 _answer=123를 넣는과 별개로
b는 헤당 메모리에 동시에 접근할 수 있으므로 아무런 문제가 없습니다.
0
2번째 질문은 제가 질문을 잘못했네요
쓰레드가 동시에 실행된다고 하셨는데 그러면
A() 함수에서 _answer =123; 값을 넣고 _complete를 =true하기전에
B함수에서 if(_complete)를 검사하면 _complete는 아직 false이기 때문에
B함수에서 _answer값을 출력하지 못할수도 있는거 아닌가요?
그러면 while문으로 계속 true인지 계속 체크해야하는거 아닌가요?
예문을 실행하면 정상적으로 작동되긴한데 이해가 잘안가네요 설명 부탁드립니다.
TLS 질문드립니다.
0
43
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
169
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
82
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
106
1
스핀락 질문.
0
110
2

