[C# 서버] 메모리 배리어
·
server/socket server
📄 메모리 배리어 메모리 배리어는 [코드 재배치 억제] 캐시에 의한 재배치, CPU 파이프라인에 의한 코드 재배치에 의해 멀티스레드환경에서 의도하지 않은 연산 결과를 억제할 수 있습니다. [가시성 보장] 또한 특정 스레드에서 공유 메모리 자원에 대한 값을 변경하고, 다른 스레드가 같은 공유 메모리에 접근할 때, 특정스레드가 변경해놓은 값을 읽어올 수 있도록 합니다. 📑 예제 namespace ServerCore { class Program { static int x = 0; static int y = 0; static int r1 = 0; static int r2 = 0; static void Thread1() { y = 1; //Store y //Thread.MemoryBarrier(); r1 = x;..
[C# 서버] volatile
·
server/socket server
📄 volatile volatile 변수 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. C/C++ 프로그래밍 언어에서 이 키워드는 최적화 등 컴파일러의 재량을 제한하는 역할을 한다. 개발자가 설정한 개념을 구현하기 위해 코딩된 프로그램을 온전히 ko.wikipedia.org 최적화 등 컴파일러의 재량을 제한하는 역할을 한다. 개발자가 설정한 개념을 구현하기 위해 코딩된 프로그램을 온전히 컴파일되도록 한다. 주로 최적화와 관련하여 volatile가 선언된 변수는 최적화에서 제외된다. volatile는 멀티스레드 환경에서 컴파일러의 최적화로 인해 개발자가 의도한 코드가 바뀌어 비 정상적으로 작동하는것을 방지하기위해 해당 변수에 컴파일러 최적화를 제한(제외)하는 키워드입니다. 디버그 환..
[C# 서버] 멀티스레드(Multi-thread) 기초
·
server/socket server
📄 멀티스레드 멀티스레드, 코어에서 여러 개의 스레드를 효과적으로 실행할 수 있는 하드웨어 지원을 갖추고 있는 장점을 활용하여 한번에 여러 개의 작업을 동시에 호출하여 실행하도록 하는 것입니다. 📑 Thread namespace ServerCore { class Program { static void SubThread() { for (int i = 0; i < 10; ++i) { Console.WriteLine("서브 스레드"); } } static void Main(string[] args) { Thread subthread = new Thread(SubThread); //스레드 생성 subthread.Name = "서브스레드"; //스레드의 이름을 설정 subthread.IsBackground = t..
[유니티] 포톤(Photon) - 닉네임 동기화 및 시각화
·
server/unity_photon
✅ 기능 유니티에서 멀티플레이를 쉽고 간편하게 구축할 수 있는 Photon 에셋을 이용하여 멀티플레이를 구축합니다. 플레이어를 식별하기 위해 플레이어 캐릭터 오브젝트 상단에 닉네임을 출력할 것인데, 유니티의 포톤에서 지원하는 기능으로 간단하게 구현합니다. ✅ 도움 받은 곳 Player names with photon PUN - Unity Answers answers.unity.com ✅ 흐름도 ✅ 사용 예시 ✅ 구현 //LobbyManager.cs // 룸 접속 시도 public void Connect() { PhotonNetwork.NickName = mNicknameField.text; // 중복 접속 시도를 막기 위해, 접속 버튼 잠시 비활성화 joinButton.interactable = fals..
bonnate