inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

SendBuffer

ThreadLocal<SendBuffer> 질문

418

maple V

작성한 질문수 15

0

public static class Helper
{
    private static readonly ThreadLocal<int> Num = new ThreadLocal<int>(() => 0);

    public static int Plus(int n)
    {
        Num.Value += n;
        return Num.Value;
    }
}

public class Program
{
    public static void Main()
    {
        var action = () =>
        {
            Console.WriteLine(Helper.Plus(1));
        };
        Parallel.Invoke(action, action); 
        Parallel.Invoke(action, action);
        Parallel.Invoke(action, action);
        Console.WriteLine(Helper.Plus(100)); 
        /* 결과
         * 1
         * 1
         * 2
         * 2
         * 3
         * 3
         * 104
         */
    }
}

ThreadLocal<SendBuffer> 타입은 스레드가 해당 값을 참조하려 할 때 스레드의 스택 영역에 할당해주잖아요.

 

이 것은 마치 냉장고에서 재료를 꺼내러 갔더니 요리사들에게 재료의 사본을 꺼내 주는 것과 같은 거네요?

그렇다는 것은 클라이언트 A와 B는 { 1, 1, 0, 0 }의 ArraySegment 동시에 가져가게 되는 꼴인데,

A와 B가 서로 2 바이트 만큼 SendBuffer에 덧붙인다고 했을 때

A가 Open & Close해서 작성한 SendBuffer {1, 1, 1, 1}과 B가 Open & Close해서 작성한 SendBuffer {1, 1, 1, 0}이 서로 충돌하는 상황이 될 것 같은데요.

1) 제가 이해한 것이 맞는지 궁금하구

2) 충돌하는 상황이라면 문제가 되는지 궁금합니다.

항상 감사합니다.

C# network unity

답변 1

2

Rookiss

1) 음~ 몇 번 읽어봤는데 질문이 이해가 안 갑니다 OTL
2)  TLS 영역은 각기 따로 관리하기 때문에 Open/Close를 여러 쓰레드에서 동시에 하더라도
서로 영향을 주지 않습니다. 버퍼를 열어서 패킷 정보를 기록하고 다시 닫는 부분까지는
개별적으로 하기 때문에 서로 충돌할 수가 없습니다.

C#에서의 RAII

0

71

3

TLS 질문드립니다.

0

82

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

76

2

Unity Span

0

100

2

XML, Dll 차이점

0

134

2

Session 질문입니다

0

98

1

Write Read 커서 키워드

0

88

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

85

2

네트워크 Send 전담 스레드 배치

0

115

2

UnhandledException 으로 서버 터지는 경우

0

104

2

컨텐츠 단, 엔진 단

0

118

1

질문 있습니다

0

93

2

C# 게임서버 3D MMORPG

0

159

2

유니티6 버전

0

108

2

receive하는 부분과 send하는 부분의 차이

0

154

2

커서의 위치의 중요성

0

111

2

C++ 전혀 모르는데 C# 서버

0

179

2

강의에 질문이 있습니다

0

94

2

멀티스레드 이해도 질문

0

108

1

500 vs 500

0

148

3

OnAcceptHandler 액션 함수

0

71

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

207

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

87

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

116

1