분류 전체보기

    스핀락(Spin Lock)

    스핀락(Spin Lock)이란?스핀락은 임계영역에 진입하기 위해 락이 해제될 때까지 루프를 돌며(busy waiting / active waiting) 대기하는 락 기법이다.즉, 락이 걸려 있을 때 블록 상태로 대기하지 않고, 계속해서 락을 얻기 위해 시도하는 방식이다.작동 방식한 스레드가 락을 획득하면, 다른 스레드는 락이 풀릴 때까지 계속 CPU를 점유한 채 반복 검사(spin) 한다.락이 해제되면 가장 먼저 락을 검사하던 스레드가 락을 획득하고 임계영역에 진입한다.// 간단한 의사 코드while (locked) { // do nothing (busy wait)}locked = true;// 임계영역...locked = false;특징장점컨텍스트 스위칭이 발생하지 않아, 락이 짧게 유지될 경우 ..

    세마포어(Semaphore)

    세마포어멀티스레드나 멀티프로세스 환경에서는 여러 실행 흐름이 동시에 하나의 공유 자원에 접근할 수 있기 때문에, 예상치 못한 충돌이나 오류가 발생할 수 있다.이를 방지하기 위해 등장한 동기화 도구 중 가장 기본적이면서 강력한 것이 바로 세마포어(Semaphore)이다.세마포어는 크게 카운팅 세마포어와 이진 세마포어로 나뉘며, 이 글에서는 두 종류를 각각 개념부터 동작 방식, 예외 사항까지 정리한다.1. 범용 세마포어 (카운팅 세마포어)개념카운팅 세마포어는 정수 값을 가지는 동기화 객체로, 여러 개의 동일한 공유 자원을 보호할 때 사용된다.세마포어의 값은 현재 사용 가능한 자원의 수를 의미하며, 프로세스나 스레드가 자원을 사용할 때는 값을 감소시키고, 반납할 때는 값을 증가시킨다.연산초기화: 자원의 개수만..

    뮤텍스(Mutex)

    뮤텍스 (Mutex)란?뮤텍스(Mutex, Mutual Exclusion)는 하나의 공유 자원에 여러 스레드가 동시에 접근하는 것을 방지하기 위한 동기화 기법이다.멀티스레드 환경에서 발생할 수 있는 경쟁 조건(Race Condition)을 방지하고, 임계영역(Critical Section)을 안전하게 보호하는 데 사용된다.주요 특징단일 자원 보호에 특화된 락소유 개념 존재: 락을 획득한 스레드만 해제할 수 있다임계영역 보호: 동시 접근을 차단하여 데이터 일관성 유지커널 기반 동기화 도구: 필요 시 사용자 모드 → 커널 모드 전환 (문맥 교환 발생 가능)동작 방식뮤텍스는 기본적으로 다음의 구조로 작동한다.스레드가 공유 자원을 사용하기 전 lock을 시도다른 스레드가 이미 뮤텍스를 소유하고 있다면 블로킹 상..

    멀티쓰레드 환경에서 생길 수 있는 문제들

    멀티쓰레드 환경에서 발생할 수 있는 문제들멀티쓰레드는 하나의 프로세스 내에서 여러 작업을 동시에 처리할 수 있어, CPU 자원을 효율적으로 활용할 수 있게 해준다.하지만 동시에 여러 쓰레드가 동일한 자원에 접근하게 되면 다양한 문제가 발생할 수 있으며, 이들 문제는 시스템 안정성과 성능에 직접적인 영향을 미친다.1. 경쟁 조건 (Race Condition)정의여러 쓰레드가 동시에 같은 자원(예: 전역 변수, 파일 등)에 접근하고 수정하려 할 때 발생하는 문제로,실행 순서에 따라 결과가 달라지는 비결정적 현상이다.예시cpp복사편집counter++; // 읽기 → 증가 → 쓰기 (세 단계 중간에 다른 쓰레드가 개입 가능) 문제점간헐적이고 재현이 어려운 버그 발생결과값이 불안정하거나 예측 불가능해결뮤텍스, 세..

    다양한 OS 스케줄링 기법

    멀티스레딩 또는 멀티프로세스 환경에서의 스케줄링 기법멀티스레딩 혹은 멀티프로세스를 사용할 때 운영체제는 어떤 프로세스를 언제 실행할지를 결정하는 스케줄러를 사용한다.이때 사용되는 여러 스케줄링 정책들은 각기 다른 목적과 환경에 최적화되어 있으며, 시스템 성능과 사용자 경험에 큰 영향을 준다.1. FCFS (First-Come, First-Served)가장 먼저 도착한 프로세스를 먼저 실행하는 방식큐에 들어온 순서대로 처리되므로 구현이 간단하다단점: 실행 시간이 긴 프로세스가 먼저 들어오면 짧은 프로세스가 오래 대기하는 현상이 발생할 수 있다 (Convoy Effect)주로 배치 처리 시스템에서 사용2. Round Robin (RR)모든 프로세스에 동일한 시간 할당량(타임퀀텀)을 부여실행 중 타임퀀텀이 만..

    쓰레드와 프로세스 (Thread & Process)

    프로세스(Process)란?프로세스는 실행 중인 프로그램으로, 운영체제로부터 자원을 독립적으로 할당받는 실행 단위이다.하나의 프로세스는 고유한 메모리 공간을 가지며, CPU, 메모리, 파일, 입출력 자원 등을 할당받아 독립적으로 실행된다.특징코드, 데이터, 힙, 스택 등 고유의 메모리 공간을 가진다다른 프로세스와 메모리를 공유하지 않음프로세스 간 통신은 별도의 메커니즘(IPC, 파이프, 소켓 등)을 사용해야 하므로 통신 비용이 크다하나의 프로세스가 오류로 종료되더라도 다른 프로세스에는 영향을 주지 않음쓰레드(Thread)란?쓰레드는 프로세스 내에서 실행 흐름을 분리한 최소 실행 단위이다.한 프로세스 내에서 여러 쓰레드가 동시에 실행될 수 있으며, 메모리 공간을 공유하면서 작업을 나누어 수행한다.특징같은 ..

    경쟁 조건(Race Condition)이란?

    경쟁 조건(Race Condition)이란?경쟁 조건(Race Condition)은 둘 이상의 스레드 또는 프로세스가 동시에 동일한 공유 자원에 접근할 때,실행 순서나 타이밍에 따라 프로그램의 결과가 달라지는 현상을 말한다.이러한 현상은 공유 자원에 대한 접근이 적절히 동기화되지 않았을 때 발생하며,예상치 못한 동작, 논리 오류, 데이터 손상 등으로 이어질 수 있다.경쟁 조건의 특징멀티스레드 또는 멀티프로세싱 환경에서 주로 발생재현이 어렵고 디버깅이 매우 까다로운 대표적인 동시성 버그프로그램 테스트 중에는 잘 나타나지 않다가 실제 환경에서 간헐적으로 터지는 경우가 많음공유 자원: 변수, 메모리, 파일, 소켓 등경쟁 조건 예시이전 글 "임계영역이란?"에 나오는 카운터 예제 참고.경쟁 조건 해결 방법경쟁 조..

    Effective C++ 공부 (항목 6 ~ 10)

    Effective C++ 요약 (항목 6~10)항목 6: 컴파일러가 만들어주는 함수를 원치 않으면 명시적으로 금지하라컴파일러는 특별한 요청이 없어도 복사 생성자와 대입 연산자를 자동으로 생성한다. 하지만 어떤 객체는 복사되면 안 되는 경우가 있다.이럴 땐 다음처럼 private으로 선언하고 구현하지 않기:class A {private: A(const A&); A& operator=(const A&);};이러면 외부 복사가 불가능해진다. 만약 friend 함수가 사용하면 컴파일은 되지만 링커 오류 발생.현대적 방법 (C++11 이후):class A {public: A(const A&) = delete; A& operator=(const A&) = delete;};가독성, 유지보수성 증..