목록Game Server (C++) (18)
Coding Memo
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 작성한 글입니다. 아래 코드를 살펴보자 #pragma once #include #include using namespace std; class A { public: int v = 10; }; class B { public: B() {} void SetRef(A* a) { _ref = a; } void DoSomethingWithRef() { _ref->v += 1; } private: A* _ref = nullptr; }; int main() { A* a = new A(); B* b = new B(); b->SetRef(a); // 어떤 이유로 A가 소멸됨 delete a; while (true) { if (b) { b->DoS..
본 포스팅은 인프런에 등록되어 있는 Rockiss 님의 강의를 보고 간단하게 정리한 글입니다. C++ 에서도 C11 부터 자체적으로 std에 lock을 지원해주고 있다. 기본적인 lock 기능만 사용할 경우 불편한 점이 몇가지 있다. 1. 표준 mutex로는 재귀적인 lock을 잡을 수 없다. (recursive_mutex가 있긴하다) 2. 메모리를 동시에 쓰거나 읽을 때는 반드시 원자적으로 접근해야하지만, 읽기만 할때는 반드시 원자적으로 접근 할 필요가 없다. (-> 많은 쓰레드들이 동시에 어떤 값을 읽기만 하는 것은 lock이 필요하지 않을 수 있다.) 따라서 위와 같은 불편한 점과 편의를 위해 직접 구현하기도 한다. 구현 핵심 lock을 가지고 있는 쓰레드들을 구분하기 위해 32bit 사용 상위 1..