서론
스레드 동기화는 여러 스레드가 동시에 접근할 수 있는 공유 자원에 대한 접근을 조절하여 데이터의 일관성을 유지하고
경합 조건(Race Condition)을 방지하는 기술이다.
동기화를 하지 않으면 여러 스레드가 동시에 같은 자원에 접근하여 예기치 않은 결과를 초래할 수 있다.
주요 개념
임계 구역(Critical Section)
여러 스레드가 동시에 접근하면 안되는 코드 블럭이다. 이 구역에서는 공유 자원에 대한 읽기 또는 쓰기가 수행된다.
경합 조건(Race Condition)
두 개 이상의 스레드가 동시에 임계 구역을 실행할 때 발생하는 문제로, 데이터의 일관성이 깨지는 현상이다.
원자성(Atomicity)
더 이상 쪼갤 수 없는 작업 단위로, 다른 스레드가 끼어들 수 없는 연산을 말한다.
동기화 방법
뮤텍스(Mutex)
- 상호 배제(mutual exclusion)를 제공하여 한 번에 하나의 스레드만 임계 구역을 실행하도록 한다.
- lock()과 unlock()을 통해 임계 구역의 진입과 종료를 제어한다.
세마포어(Semaphore)
- 카운터를 통해 제한된 수의 스레드가 임계 구역에 진입할 수 있도록 한다.
- wait()과 signal()을 사용하여 카운터를 감소 또는 증가시킨다.
- 이진 세마포어는 뮤텍스와 유사하게 동작한다.
모니터(Monitor)
- 객체 수준의 동기화를 제공하며, 객체의 모든 메서드에 대한 상호 배제를 보장한다.
조건 변수(Condition Variable)
- 스레드 간의 통신을 돕기 위해 특정 조건이 만족될 때까지 스레드를 대기시키고, 조건이 만족되면 대기 중인 스레드를 깨운다.
- wait(), notify(), notifyAll() 메서드를 사용한다.
'🌠Development > QT' 카테고리의 다른 글
QT - 스레드 뮤텍스 (0) | 2024.07.25 |
---|---|
QT - Thread (3) 2개의 클래스 객체를 스레드로 실행시키기 (1) | 2024.07.24 |
QT - Thread (2) [공식문서를 살펴보자] (2) | 2024.07.22 |
Qt - Thread(1) (1) | 2024.07.22 |
QT project - 메모장 구현하기 (0) | 2024.07.19 |