반응형 분류 전체보기691 바쁜 대기(Busy Waiting)에 대해서 알아보자 바쁜 대기(Busy Waiting)바쁜 대기(Busy Waiting)란, 스레드가 특정 조건이 만족될 때까지 잠들지 않고, CPU를 계속 점유하며 무한 루프를 돌면서 조건을 체크하는 상태를 말한다. 쉽게 비유하자면, 택배가 오기를 기다릴 때 현관문 앞에 서서 1초마다 밖을 계속 확인하는 것과 같다.바쁜 대기 작동 원리// 공유 자원이 해제될 때까지 무한 반복하며 CPU를 소모함while (is_locked) { // 아무것도 하지 않고 조건만 계속 체크 (Spinning)}// 조건이 만족(false)되면 루프를 탈출하여 다음 코드 실행그렇다면 왜 쓰는 걸까?CPU를 점유하고 있는데 왜 쓰는 거지?라고 생각할 수 있지만, 특수 환경에서는 오히려 효율적이다.컨텍스트 스위칭(Context Switchi.. 2026. 2. 1. 상호배제란 무엇인가? 상호배제(Mutual Exclusion, Mutex)란?상호배제란, 여러 개의 스레드가 공유 자원(변수, 파일, 메모리 등)에 동시에 접근하는 것을 막는 기술을 의미한다.쉽게 말하자면, 화장실(공유 자원)이 하나뿐인 카페에서 화장실 열쇠(Mutex)를 가진 사람만 안에 들어갈 수 있게 제한하는 것이다.상호배제가 필요한 이유여러 스레드가 동일한 데이터를 수정하려고 하면 데이터가 꼬이는 현상이 발생한다.문제 상황 : 스레드 A와 B가 동시에 변수 count = 0에 1을 더하려고 한다.기대 결과 : 2실제 결과 : 두 스레드가 동시에 count를 읽어가서 각자 1로 덮어쓰면 최종결과는 1이 될 수 있다.상호배제 사용하기std::mutex는 가장 기본적인 뮤텍스 객체이다.lock(), unlock()을 통해서.. 2026. 2. 1. thread_local 키워드에 대해서 thread_local 키워드란?thread_local은 데이터 타입(Data Type)은 아니고, 저장소 지정자(Storage Class Specifier)이다.int, double, class와 같은 자료형이 아니라, 해당 변수를 어디에, 얼마나 오랫동안 저장할 것인지를 컴파일러에게 지시하는 키워드(keyword)이다. thread_local로 해당 변수의 생명주기를 설정하는 것이 가능하다. 즉, thread_local 키워드를 사용해서 변수를 선언하면 해당 변수의 생명주기는 해당 스레드의 생명주기와 동일하게 설정된다.thread_local의 핵심 개념thread_local 키워드가 붙은 변수는 스레드 저장 수명(Thread Storage Duration)을 가진다.독립된 복사본 : 각 스레드마다 해.. 2026. 1. 31. RAII에 대해서 알아보자 RAII란 무엇인가?C++을 공부하다 보면 만나게 되는 개념인 RAII(Resource Acquisition Is Initialization)는 "자원 획득은 초기화다"라는 다소 난해한 이름을 가진 디자인 패턴이다. 하지만 핵심은 명확하다. 객체의 수명을 자원의 관리 도구로 활용하자. RAII 발음하기에 따라서 알-에이-아이-아이 혹은 라이라고 읽는 이 패턴은 확실히 매번 마주칠 때마다 낯설고 어색하다. 이번 기회에 명확하게 한번 짚고 넘어가보도록 하자.RAII의 핵심 원리자원(메모리, 파일 핸들, 소켓, 뮤텍스 등)은 반드시 해제가 필요하다. RAII는 해제 절차를 객체의 소멸자에게 맡긴다. 즉 프로그래머가 명시적으로 해제하지 않아도 소멸자가 호출되면 자동으로 해당 자원이 해제되는 것이다.획득(Acqu.. 2026. 1. 26. C++ 임시 객체에 대해서 갑자기 만난 이상한 문법의 코드아래의 코드를 살펴보자. generator 변수를 초기화하는데 초기값으로 hash() (...) 이런 식으로 호출되는 부분이 있다.함수도 아니고 뭔지 몰라서 찾아보니 hash 타입의 임시 객체를 생성해서 () 연산자로 호출한 코드였다.하나씩 알아보자.int rendGen(const int& min, const int& max){ static thread_local mt19937 generator(hash() (this_thread::get_id())); uniform_int_distribution distribution(min, max); return distribution(generator);}풀어서 코드를 작성해보면 아래와 같다.int rendGen(const int& .. 2026. 1. 25. 실행 중인 프로세스(Process)를 디버깅하기 실행 중인 프로세스를 디버깅하기개발 중에는 IDE(통합 개발 환경)를 통해서 개발하기 때문에 보통 IDE에서 디버그 모드나 릴리즈 모드로 프로그램을 실행하게 된다. 하지만 이게 익숙해지다 보면 프로그램을 exe 파일을 더블클릭해서 실행하는 게 기본인데 이를 망각하게 된다. 개발이란 이런 기본적인 것조차 까먹게 만드는 무시무시한 것이다. 그렇다면 IDE를 통하지 않고 실행시킨 프로그램을 마치 IDE에 실행시킨 것처럼 연결시키는게 가능할까?물론 가능하다.예제 코드그냥 무한히 실행되도록 만든 말이 안되는 예제 코드이다. 해당 코드를 빌드해서 실행시키면 무한히 실행될 것이다.void main(){ std::cout 작업 관리자에서도 무한히 실행 중인 것을 확인할 수 있다.비주얼 스튜디오에서 프로세스를 디버그로 .. 2026. 1. 24. 이전 1 2 3 4 ··· 116 다음