1️⃣ 공유 자원

  1. 공유 자원: 여러 개의 스레드가 동시에 접근할 수 있는 변수, 객체, 데이터 구조, 파일, 네트워크 소켓 등을 의미

  2. 왜 공유 자원을 사용해야 할까?

공유 자원은 효율적인 데이터 처리와 자원 활용을 위해 필수적이다. 다음과 같이 33가지 주요 이유가 있다.

2️⃣ 임계 영역

  1. 임계 영역: 공유 자원 에 접근하는 코드 블록을 의미한다. 이 영역은 두 개 이상의 스레드가 동시에 실행되면 문제를 일으킬 수 있는 코드 부분이므로, 반드시 동기화를 통해 보호해야 한다. 임계 영역을 보호하지 않으면 여러 스레드가 동시에 공유 자원을 수정하면서 데이터 불일치, 예측 불가능한 동작, 프로그램 충돌 등의 문제가 발생할 수 있다.

  2. 임계 영역을 보호하지 않을 경우 발생하는 가장 심각한 문제

    임계 영역을 보호하지 않으면 다양한 문제가 발생할 수 있지만, 가장 심각한 문제는 Race Condition(경쟁 상태)로 인한 데이터 불일치(Data Inconsistency)와 시스템 오류(System Crash),데드락(Deadlock)이다.

    (1) Race Condition (경쟁 상태)

    경쟁 상태란 두 개 이상의 스레드가 동시에 공유 자원에 접근하여 예상치 못한 결과를 초래하는 현상을 의미한다.

    (2) 시스템 오류(System Crash) 또는 데드락(Deadlock)

    임계 영역이 보호되지 않으면 데이터가 일관성을 잃고, 시스템이 비정상적인 상태에 빠지거나 충돌(System Crash)할 가능성이 있다.

3️⃣ 동기화 메커니즘

  1. 동기화 메커니즘이 필요한 가장 큰 이유는 멀티스레드 환경에서는 여러 스레드가 동시에 공유 자원에 접근할 수 있기 때문에, 데이터 무결성이 쉽게 깨질 수 있습니다.

  2. 동기화가 없으면 발생할 수 있는 문제 3가지

(1) Race Condition (경쟁 상태)로 인한 데이터 불일치 Race Condition이란 여러 스레드가 동시에 공유 자원에 접근하여, 연산이 예상치 못한 순서로 실행되는 현상이다.이로 인해 잘못된 데이터가 저장되거나 데이터 무결성이 깨지는 문제가 발생할 수 있다.

(2) Dirty Read (더러운 읽기)

Dirty Read란 한 스레드가 아직 완료되지 않은 트랜잭션의 데이터를 읽는 문제를 의미한다.

이로 인해 일관되지 않은 데이터가 다른 스레드에서 사용될 수 있다.

(3) Deadlock (교착 상태)

데드락(Deadlock) **은** 두 개 이상의 스레드(또는 프로세스)가 서로가 가진 자원의 해제를 기다리면서 **무한 대기 상태**에 빠지는 현상이다. 이는 주로 두 개 이상의 공유 자원을 여러 스레드가 서로 다른 순서로 요청할 때 발생한다.

4️⃣ Lock

  1. 락은 멀티스레드 환경에서 공유 자원에 대한 동시 접근을 제어하는 동기화 메커니즘이다.

  2. 락의 동작 방식

    스레드가 공유 자원 접근 요청 → 락 획득 → 임계 영역 실행 → 락 해제