[C++] 멀티스레드, 세마포어와 뮤텍스
C++에서의 세마포어(Semaphore)와 뮤텍스(Mutex) 멀티스레드 프로그래밍에서 동기화(synchronization) 는 매우 중요한 이슈이며, 이를 해결하기 위한 대표적인 도구가 세마포어와 뮤텍스입니다. 이 문서에서는 두 개념의 차이, 용도, 예제는 물론, Producer-Consumer 문제, OS별 구현 차이, 다양한 C++ 뮤텍스 종류...
C++에서의 세마포어(Semaphore)와 뮤텍스(Mutex) 멀티스레드 프로그래밍에서 동기화(synchronization) 는 매우 중요한 이슈이며, 이를 해결하기 위한 대표적인 도구가 세마포어와 뮤텍스입니다. 이 문서에서는 두 개념의 차이, 용도, 예제는 물론, Producer-Consumer 문제, OS별 구현 차이, 다양한 C++ 뮤텍스 종류...
C++ 멀티스레드에서의 데드락(Deadlock)과 경쟁 상태(Race Condition) 멀티스레드 프로그래밍에서는 성능 향상을 위해 여러 스레드를 사용하지만, 공유 자원 접근 시 데드락이나 경쟁 상태와 같은 문제에 주의해야 합니다. 이 문서에서는 이 두 가지 주요 문제를 구체적인 예제와 함께 설명합니다. 1. 데드락 (Deadlock) 정의...
프로세스 vs 스레드, IPC 멀티태스킹 환경에서 효율적 자원 관리를 위해 운영체제는 프로세스(Process) 와 스레드(Thread) 라는 개념을 사용합니다. 이 문서는 두 개념의 차이, 병렬 처리 방식인 멀티프로세스/멀티스레드, 그리고 프로세스 간 통신(IPC)에 대해 정리합니다. 프로세스 vs 스레드 항목 ...
C++ 유효 범위(Scope) 정리 및 상속 관계에서의 동작 C++에서 스코프(Scope, 유효 범위) 란 변수나 함수, 클래스 등이 언제 어디서까지 접근 가능한지를 결정하는 규칙 입니다. 스코프를 잘 이해하면 코드의 안정성, 가독성, 유지보수성 이 높아지고, 네이밍 충돌을 방지할 수 있습니다. 1. 스코프의 종류 1.1 블록 스코프 (Blo...
C++ 생성자와 소멸자의 동작 원리와 주의할 점 C++에서 객체가 생성되거나 파괴될 때 실행되는 생성자(Constructor) 와 소멸자(Destructor) 는 객체 생명주기의 핵심 요소입니다. 이 두 함수는 객체의 초기화와 정리에 사용되며, 특히 상속과 다형성이 관련된 상황에서는 특별한 주의가 필요합니다. 1. 생성자(Constructor)...
C++ 가상 함수(Virtual Function)와 vtable의 동작 원리 C++에서 가상 함수(Virtual Function) 는 상속과 다형성(polymorphism) 을 구현하는 핵심 개념입니다. 가상 함수를 통해 부모 클래스 포인터(또는 참조)를 통해 자식 클래스의 메서드를 호출할 수 있습니다. 이 기능을 가능하게 하는 구조가 바로 vtab...
Unity에서 의존성 초기화 순서 문제 게임 개발 중 여러 컴포넌트 간에 초기화 순서가 중요할 경우, 단순히 Start()에 초기화를 맡기면 불안정한 실행 순서로 인해 예기치 않은 버그가 발생할 수 있습니다. 이 문서는 초기화 순서 문제를 해결하는 실전 전략과 예제를 정리한 자료입니다. 1. 문제 개요 Unity는 Start() 메서드의 호...
C++ 예외 처리 (try-catch, throw) 정리 1. 예외(Exception)란? 프로그램 실행 중에 비정상적인 상황이 발생하는 것. 예: 0으로 나누기, 메모리 부족, 파일 열기 실패 등. 이러한 예외 상황이 발생하면 프로그램이 즉시 중단되는 것이 아니라, 개발자가 지정한 처리를 수행하도록 흐름을 변경할 수 있다. 2....
Unity에서의 GameObject.Instantiate() 함수 정리 Unity에서 GameObject.Instantiate() 함수는 게임 오브젝트(GameObject)나 컴포넌트(Component)를 복제(인스턴스화) 하는 데 사용됩니다. 1. 기본 사용법 GameObject clone = Instantiate(original); 오...
C++ new/delete vs malloc/free 차이 정리 C++에서 동적 메모리를 할당하고 해제할 때는 new/delete와 malloc/free를 사용할 수 있습니다. 하지만 이 둘은 작동 방식, 안전성, 객체 초기화 등 여러 면에서 중요한 차이가 있습니다. 1. 주요 차이 요약 항목 new / ...