서버 4

std::future

std::future란?비동기 작업의 결과를 전달하기 위한 객체로, std::async, std::promise, std::packaged_task와 함께 사용된다.단순한 애들을 처리할 때 혹은 한번 발생하는 이벤트에 사용할 때 유용하다. std::asyncint Calculate(){ int sum = 0; for(int i = 0; i future = std::async(std::launch::async, Calculate); std::future_status status = future.wait_for(1ms); if(status == future_status::ready)//준비완료 확인 { } int sum = future.get();}  st..

서버 2025.04.08

조건 변수 Condition Variable

Condition Variable (CV)란?condition variable은 c++에서 제공하는 동기화 방식으로, 유저 레벨에서 제어되지만 내부적으로 OS의 커널 프리미티브를 활용한다.커널 동기화 프리미티브는 운영체제가 커널 레벨에서 직접 제공하고 관리하는 동기화 매커니즘이다. Producer 동작 방식Lock을 잡는다.공유변수 값을 수정한다.Lock을 푼다.조건변수를 통해 다른 스레드에게 통지한다.void Producer(){ while(true) { { unique_lock lock(m); q.push(10); } cv.notify_one(); }}cv_notify_one() - wait중인..

서버 2025.04.08

DeadLock과 Lock구현

DeadLock이란?둘 이상의 프로세스 혹은 스레드가 상대방이 점유한 자원을 대기하며 무한정 기다리는 상황이다.발생조건상호배제(Mutual Exclusion) - 자원은 하나의 프로세스만 사용 할 수 있다.점유대기(Hold and Wait) - 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기중이어야 한다.비선점(No Preemption) - 다른 프로세스에 할당된 자원은 사용이 끝날때까지 강제로 빼앗을 수 없다.순환 대기(Circular Wait) - 프로세스들이 서로 자원을 기다리며 순환적인 대기 관계여야 한다.SpinLock이란?경쟁 상태 상황에서 Lock이 반환될때까지 즉 임계영역에 진입 가능할 때까지 프로세스가 계속 재시도하며 대기하..

서버 2025.04.07

스레드와 멀티스레드

Thread란?스레드는 프로세스 내에서 실행되는 작업의 흐름이다. 하나의 프로세스는 하나 이상의 스레드를 갖고 있다.스레드끼리는 코드, 힙, 데이터 영역은 공유하지만 스택 메모리는 따로 할당 받는다.#include #include void Hi(){ cout  t.hardware_concurrency() - 현재 시스템의 물리적 또는 논리적 CPU 코어 수 반환 t.get_id() - 스레드 객체의 고유 ID를 반환t.detach() - 스레드를 독립적으로 실행되도록 함, 더 이상 join()으로 기다릴 수 없음t.joinable() - 해당 스레드가 join()이 가능한 상태인지 확인t.join() - 해당 스레드가 끝날때까지 대기MultiThread란?여러 개의 스레드를 동시에 실행 -> 즉 하나의 ..

서버 2025.04.05