1. Lock이란멀티스레딩 환경에서 공유 자원에 대한 접근을 제어하는 동기화 메커니즘Lock의 주요 목적은 여러 스레드가 동시에 같은 자원에 접근하는 것을 방지하여 데이터의 일관성을 유지하는 것이다. 주요 Lock 종류: 1) 상호 배제 Lock (Mutual Exclusion Lock) - 가장 기본적인 형태의 Lock - 한 번에 하나의 스레드만 임계 영역에 진입 가능 2) 읽기-쓰기 Lock (Read-Write Lock) - 읽기 작업과 쓰기 작업을 구분 - 여러 스레드가 동시에 읽기 가능, 쓰기는 독점적으로 수행 3) 재진입 가능 Lock (Reentrant Lock) - 같은 스레드가 이미 획득한 Lock을 다시 획득 가능 - 재귀적 알고리즘이나 중첩된 메서드 호출에서 유..
1. Atomic 연산중간 상태 없이 한 번에 완전히 수행되는 연산다른 스레드가 연산 중간에 끼어들 수 없음을 보장한다. 특징: - 불가분성 (Indivisibility): 연산이 완전히 수행되거나 전혀 수행되지 않음 - 일관성 (Consistency): 다른 스레드에서 중간 상태를 관찰할 수 없음 - 순서성 (Ordering): 메모리 순서 (Memory Ordering) 보장 2. Atomic 변수 사용법C++11부터 헤더를 통해 atomic 타입을 제공한다. ex)#include #include #include std::atomic num(0);void Increment() { for (int i = 0; i 주요 atomic 연산: store() 값 저장 load() 값 로..
1. 메모리 계층 구조1.1. 캐시 메모리 (L1, L2, L3 캐시)L1 캐시: - CPU 코어에 가장 가까운 캐시 - 보통 32KB ~ 64KB 크기 - 접근 속도: ~4 사이클 - 일반적으로 명령어 캐시와 데이터 캐시로 분리됨 L2 캐시: - L1보다 크고 느림 - 보통 256KB ~ 512KB 크기 - 접근 속도: ~10 사이클 - 대부분의 경우 코어별로 독립적 L3 캐시: - 가장 큰 온칩 캐시 - 보통 수 MB ~ 수십 MB 크기 - 접근 속도: ~40 사이클 - 일반적으로 모든 코어가 공유 캐시의 역할:1) 자주 사용되는 데이터를 빠르게 접근할 수 있는 위치에 저장2) 메모리 접근 지연 시간 감소3) 메모리 대역폭 병목 현상 완화 멀티스레딩에서의 주의점: - 캐시 ..
1. 경쟁 상태 (Race condition)경쟁 상태는 둘 이상의 스레드가 공유 데이터에 동시에 접근하여 예측할 수 없는 결과를 초래하는 상황을 말한다. ex)#include #include int num = 0;void Increment() { for (int i = 0; i 위 예시에서 `num`은 race condition의 대상이 된다.두 스레드가 동시에 이 변수를 증가시키려고 하면, 일부 연산이 손실될 수 있다. 2. 임계 영역(Critical Section)임계 영역은 여러 스레드가 동시에 접근해서는 안 되는 공유 자원을 접근하는 코드 영역을 말한다.임계 영역에 대한 접근은 상호 배제(mutual exclusion)를 통해 동기화되어야 한다. 임계 영역의 특성 :- 한 번에 하나의 ..
1. 스레드 생성 방법C++에서 스레드를 생성하는 방법 1) std::thread 클래스 사용:#include #include void ThreadFunction() { std::cout 2) 람다 함수 사용:#include #include int main() { std::thread t([](){ std::cout 3) 함수 객체(Functor) 사용:#include #include class ThreadFunctor {public: void operator()() { std::cout 2. 스레드 생명주기1) 생성(Created): std::thread 객체가 생성되면 새로운 스레드가 시작됨2) 실행 가능(Runnable): 스레드가 실행될 준비가 되었지만, ..
1. 프로세스와 스레드 프로세스 (Process)실행 중인 프로그램의 인스턴스특징: - 독립된 메모리 공간 - 운영체제로부터 자원을 할당받음 - 최소 하나의 스레드(메인 스레드) 포함 - 독립적인 메모리 공간을 가짐(코드, 데이터, 힙, 스택) 스레드 (Thread)프로세스 내에서 실행되는 흐름의 단위 특징: - 같은 프로세스 내의 스레드들은 메모리 공간을 공유 - 빠른 생성과 컨텍스트 스위칭 - 병렬 처리 가능 - 스택만 독립적으로 갖고 나머지는 프로세스 내에서 공유 2. 멀티스레딩의 장단점 장점1) 성능 향상: 여러 작업을 동시에 처리하기 때문에 프로그램의 실행 속도가 빨라짐2) 응답성 향상: 한 스레드의 작업이 길어져도 프로그램이 계속 실행되기 때문에 사용자의 응답성이 증가3) 자..