| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 벨만-포드
- Spin Lock
- 게임 서버 아키텍처
- Binary Lifting
- Prisma
- Github
- trie
- DP
- PROJECT
- 분리 집합
- Lock-free Stack
- 자바스크립트
- Behavior Design Pattern
- 비트필드를 이용한 dp
- R 그래프
- 트라이
- localstorage
- Strongly Connected Component
- 최소 공통 조상
- 비트마스킹
- 그래프 탐색
- 이분 탐색
- 강한 연결 요소
- map
- Express.js
- LCA
- ccw 알고리즘
- JavaScript
- 2-SAT
- SCC
- Today
- Total
목록분류 전체보기 (231)
dh_0e
DeadLock Profiler (데드락 탐지)DeadLock을 탐지하는 Profiler를 구성하여 RW Lock과 함께 사용Lock으로 visit check, dfs로 그래프 탐색하면서 사이클(DeadLock)을 찾는 방식 DeadLockProfiler.h#include #include #include /*-------------------- DeadLockProfiler---------------------*/// lock으로 visit check 하면서 그래프 탐색하는 느낌class DeadLockProfiler{public: void PushLock(const char* name); void PopLock(const char* name); void CheckCycle();private: void ..
Reader-Writer Lock32비트 int형을 사용하여 상위 16비트를 Write 소유 스레드 ID로, 하위 16비트를 Read 카운트로 사용하는 RW SpinLockMutex를 사용하지 않고 RW Lock을 직접 구현하는 이유재귀적으로 lock을 사용하기 어려움Recursive Lock을 따로 사용해야 함상호배타적인 특성이 필요한 상황에서 사용하고자 함보통 고정되어 있는 보상이나 고정된 데이터를 변경해야 하는 상황에서 일반 lock을 사용하기에 아까움ex) 99.9999% 일정한 보상 아이템을 변경해야 하는 0.0001%의 상황Write Count와 Read Count를 사용하여 Readers-Writers Problem 완화 [OS] Synchronization II동기화의 고전 문제 3가지Bo..
Thread Manager게임 서버나 대규모 시스템 프로그래밍에서 수많은 thread들을 효율적으로 관리하기 위한 지휘소 역할주요 용도Thread 생성 및 생명주기 관리서버가 시작될 때 필요한 스레드 개수(Worker Threads)를 한꺼번에 생성하고 관리함각 스레드가 언제 시작되고 언제 안전하게 종료(Join)되어야 하는지를 제어하여 자원 누수를 방지함Thread 로컬 저장소(TLS) 초기화각 스레드만이 가지는 고유한 데이터(ex ThreadId, 전용 메모리 풀)를 설정GThreadManager를 통해 현재 어떤 스레드가 어떤 역할을 수행 중인지 추적할 수 있게 도움 작업 분배 및 부하 분산 (Load Balancing)수천 명의 유저 패킷이 들어왔을 때, 이를 어떤 스레드에게 맡길지 결정하는 로직..
콜백(Callback) 함수정의: 나중에 호출될 함수를 의미하며, 함수를 실행할 때, 인자로 다른 함수를 전달하여 특정 이벤트가 발생하거나 작업이 완료되었을 때 그 함수가 실행되도록 하는 기법특징: 함수가 실행 주도권을 갖는 것이 아니라, 특정 시점에 호출되도록 등록하는 방식용도: 이벤트 처리, 서버 통신 완료 후 작업, 정렬 알고리즘의 비교 로직 등함수 포인터를 직접 쓰는 방식과 Modern C++의 std::function을 사용하는 방법이 있음 1. 전통적인 함수 포인터 방식 (typedef, using)C 스타일의 방식으로, 함수가 저장된 메모리 주소를 직접 가리켜 전달함문법은 복잡하지만 추가적인 오버헤드가 거의 없음// 문법: typedef 반환형 (*별칭이름)(매개변수);typedef vo..
Lock-Free Stack with Smart PointerGarbage Collector의 기능을 스마트 포인터로 대체하는 방법사실 스마트 포인터가 내부적으로 lock을 사용하기 때문에 엄밀히 말해서 Lock-Free 방식은 아님shared_ptr ptr;atomic_is_lock_free(&ptr); 로 CPU가 lock을 사용하는지 검사해 보면 false 나옴templateclass LockFreeStack{ struct Node { Node(const T& value) : data(make_shared(value)), next(nullptr) {} shared_ptr data; shared_ptr next; };public: void Push(const T& value) { shared_..
Smart Pointer 개요기존 new, delete를 사용할 때 발생하는 여러 메모리 문제들(memory leak, nullptr issue, Dangling Pointer)을 방지하기 위해 만들어짐Java, C#에서는 Garbage Collector를 사용하여 이 문제를 해결하여 개발자의 생산성을 올려주었지만, 컴퓨터에 부하가 더해져 속도가 느려짐C++ 11 이후 추가되었으며, 헤더 파일을 선언하여 사용 가능클래스로 만들어졌으며, 생산자에 포인터를 할당하고, 소멸자에서 이를 delete 해주면서 객체가 만들어질 때 메모리 할당을, 소멸할 때 메모리 해제를 자동으로 해주게끔 만들어 메모리 누수를 방지함templateclass smart_pointer{public: smart_pointer(T*..
