본문 바로가기

Game Server

(28)
[C++/게임서버] 스마트 포인터 보호되어 있는 글입니다.
[C++/게임서버] Referencing Count 지금까지 열심히 멀티스레딩 관련 공부를 진행했다. 이젠 메모리에 대한 정리를 진행하겠다. C++의 경우 다른 언어와 달리 직접적으로 메모리를 관리를 해줘야 하는 언어이기 때문에, 메모리에 대한 정책 또한 제대로 알고 갈 필요가 있다. 예로 들어 스타크래프트와 같은 게임을 개발한다고 가정하면 다음과 같이 코드를 짤 것이다. class Wraight { public : int _hp = 150; int _posX = 150; int _posY = 150; }; class Missile { public : void SetTarget(Wraight* target) { _target = target; } void Update() { int posX = target->_posX; int posY = target->..
[C++/게임서버] Deadlock Profiler 보호되어 있는 글입니다.
[C++/게임서버] Reader-Writer Lock 보호되어 있는 글입니다.
[C++/게임서버] ThreadManager 보호되어 있는 글입니다.
[C++/게임서버] Lock 기반 Stack/Queue 기본적으로 STL에서 제공하는 Stack이나 Queue는 Thread-Safe한 물건은 아니다 그렇기 때문에, 데이터를 push/pop하는 과정에서 락이나 그에 상응하는 방식으로 데이터의 원자성을 보장을 해줘야 한다. 다음과 같은 예시가 있다고 가정하자. queue q; void Push() { while (true) { int32 value = rand() % 100 + 1; q.push(value); this_thread::sleep_for(10ms); } } void Pop() { while (true) { if (q.empty()) continue; int32 value = q.front(); cout
[C++/서버] Thread Local Storage 보호되어 있는 글입니다.
[C++/서버/컴퓨터구조] 메모리 구조와 Atomic 결론 : 멀티스레드로 오면서 CPU 파이프라인과 메모리에 write가 적용되는 과정에서 발생하는 가시성 문제를 해결하기 위해서 atomic을 이용해서 동일 객체 상 동일 수정 순서를 보장해주는 식으로 메모리 상 대입의 순서를 보장한다. 이 과정에서는 다양한 메모리의 정책이 있는데 크게 3개로 나눌 수 있다. Sequentially Consistent (seq_cst) - 가장 엄격(컴파일러 입장에서 최적화 여지가 적다. = 직관적), 기본 설 Acquire-Release (acquire, release) Relaxed (relaxed) - 가장 자유(컴파일러 입장에서 최적화, 직관적이지 않음) [NC 면접 질문] 이전까지는 싱글 스레드를 기반으로 작업을 하는 환경이 많았기 때문에, 문제가 안 되던 CPU..