BackEnd/IOCP게임서버

    [C++ 서버] 여러개의 lock을 잡을때

    [C++ 서버] 여러개의 lock을 잡을때

    std::lock(), std::adopt_lock mutex m1; mutex m2; std::lock(m1,m2); //내부적으로 정한 방식에 의해서 항상 동일한 순서로 m1,m2의 lock을 걸어줍니다. //먼저 lock걸리는것이 무엇인지는 모르지만 매번 그 순서는 동일합니다. lock_guard g1(m1,std::adopt_lock); lock_guard g2(m2,std::adopt_lock); //std::adopt_lock : 이미 lock된 상태니까, 나중에 소멸될 때 unlock 해줘! std::lock()을 통해서 일정한 순서를 유지한채 lock을 걸 수 있습니다. 2개 이상의 mutex가 들어 갈 수 있습니다. 무엇이 먼저 lock걸릴지는 모르지만 항상 그 순서는 일정합니다. loc..

    [C++ 서버] Lock 기초(mutex)

    mutex를 활용한 lock #include "pch.h" #include #include #include vector v; mutex m; void Push() { for (int32 i = 0; i < 10000; i++) { //자물쇠 잠그기 m.lock(); v.push_back(i); //자물쇠 풀기 m.unlock(); } } int main() { std::thread t1(Push); std::thread t2(Push); t1.join(); t2.join(); } lock(), unlock()을 통해서 상호배제(Mutual Exclusion)을 수행합니다. (뮤텍스와 세마포어의 차이가 궁금하다면? 링크) std::lock_guard의 원리 위처럼 lock(), unlock()을 사용자가 ..

    [C++서버] Atomic

    [C++서버] Atomic

    Atomic의 필요성 #include #include int sum = 0; void Add() { for (int32 i = 0; i < 100'0000; i++) { sum++; } } void Sub() { for (int32 i = 0; i < 100'0000; i++) { sum--; } } int main() { std::thread t1(Add); std::thread t2(Sub); t1.join(); t2.join(); cout

    [C++서버] 쓰레드 기초

    [C++서버] 쓰레드 기초

    쓰레드 생성(std::thread) #include #include //헤더파일 void HelloThread() { cout

    [C++ 서버] 환경 설정

    [C++ 서버] 환경 설정

    해당 카테고리 글들은 인프런 : Rookiss 강사님의 [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 를 수강하고 공부한 내용을 정리한 내용입니다. 인프런 강의 바로가기 프로젝트,라이브러리 생성 (윈도우11, vs스튜디오2019 버전사용) 총 만들 프로젝트 2개와 라이브러리1개가 있습니다. GameServer DummyClient(클라용도) ServerCore(서버의 핵심 네트워크 및 쓰레드 기능등을 모아놓은 라이브러리) 솔루션 이름은 Server로 하였습니다. (GameServer, DumyClient 프로젝트를 생성할땐 새 프로젝트-콘솔앱 을 사용함) (ServerCore는 새프로젝트-정적 라이브러리를 사용함) 라이브러리를 만들때 정적 라이브러리로 만들면 실제 빌드..