작성한 질문수
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Thread Local Storage
해결된 질문
작성
·
393
1
static string ThreadName;
이거는 일반 전역변수인데 값을 공유한다면서 왜 값이 안바뀌나요???
static ThreadLocal<string> ThreadName
이거는 TLS이고, 모든 스레드가 전역에 고유한 공간을 가져서
이름이 바뀔수 있다는 거 맞나요?... 전역인데 다른스레드가 접근 못하는 건가요?
근데 그럴거면 스택영역 쓰지 굳이 왜 전역변수로 만들어서 쓰나요...? DB나 게임 로직에서 뽑아서 쓸수 있게 하려고 전역에다 놓는건가요? (??????)
답변 1
7
전역(정적static) : 누구나 접근 가능스택 : 현재 쓰레드만 접근 가능 BUT 함수가 끝나면 폭파되는 공간TLS : 스택처럼 현재 쓰레드만 접근 가능 BUT 함수가 호출 완료되도 여전히 유효한 공간이렇게 구분할 수가 있겠습니다.즉 쓰레드끼리 경합이 일어나지 않고 안전하면서도,반영구적으로 안전히 사용할 수 있는 공간이라는 것이죠.
헉 정말 감사합니다... 이제 그부분은 이해됐습니다!
근데 일반 전역변수인 static string ThreadName; 이 부분으로 바꿔서 실행하면 출력으로 이름이 모두 똑같이 나오는데...
누구나 접근이 가능한데 왜 스레드마다 접근해서 이름을 못바꾸고 다 똑같은 이름으로 나오나요 ....? 출력하는 시점이 다 다를텐데 값도 다르게 나와야 하는거 아닌가요??
왕기초 질문이라 죄송합니다...ㅜ
쓰레드마다 접근해서 이름을 바꿀 수 있습니다.문제는 내가 바꾼 데이터가 모두한테 동일하게 보이는 것이죠.[HB님의 아이디를 이제부터 AB라고 명하노라!]라고 하면모든 사람들이 AB로 이해하는 그런 느낌입니다.
감사합니다!!
헉 정말 감사합니다... 이제 그부분은 이해됐습니다!
근데 일반 전역변수인 static string ThreadName; 이 부분으로 바꿔서 실행하면 출력으로 이름이 모두 똑같이 나오는데...
누구나 접근이 가능한데 왜 스레드마다 접근해서 이름을 못바꾸고 다 똑같은 이름으로 나오나요 ....? 출력하는 시점이 다 다를텐데 값도 다르게 나와야 하는거 아닌가요??
왕기초 질문이라 죄송합니다...ㅜ