반응형
2개 이상의 쓰레드를 사용하면서, 동일한 메모리 접근 등으로 인해 발생할 수 있는 문제
실행시마다 항상 같은 순서로 발생하는 것이 아니기 때문에 디버그 하기 어렵다.
Thread-Safety
- Thread-safe : 여러 쓰레드가 동시에 쓰여도 안전하다.
- 동시적 처리를 하면서(여러 쓰레드를 사용하면서도) 문제없이 쓰레드를 안전하게 사용하는 것
데이터(객체나 변수 등)에 여러 쓰레드를 사용하여 접근하여도, 한번에 한개의 쓰레드만 접근가능하도록 처리하여 경쟁상황의 문제없이 사용
1. Race Condition 경쟁상황
두 개 이상의 쓰레드가 한 곳의 메모리(저장공간)에 동시에 접근하여 값을 사용하려고 할 때 문제가 발생할 수 있다.
ex) 여러 쓰레드에서 동시다발적으로 쓰기 및 읽기를 할 경우 여러 쓰레드가 경쟁적으로 데이터에 접근(Race Condition)하여 원하는 결과가 나오지 않을 수 있음.
해결 방법
2. Deadlocks 교착상태
두 개 이상의 쓰레드가 두 개 이상의 배타적인 자원 사용으로 인해(서로 점유하려고 하면서 자원 사용이 막힘) 작업이 이러지도 저러지도 못하고 진행이 되지 않는 상태
Deadlock 발생 가능성
-
- 앞선 작업이 현재의 쓰레드가 필요한 경우
- 여러 개의 세마포어가 존재할 때 순서 잘못 설계 등
=> 시리얼 큐로 해결 가능
3. Priority Inversion 우선순위 뒤바뀜
낮은 우선순위의 작업이 작업을 배타적으로 사용하고 있을 때, (다른 작업이 자원을 사용하지 못하게 막고 있으므로) 작업의 우선순위가 바뀔 수 있음.
(어느 정도는 GCD가 알아서 우선순위 조정해줌)
728x90
반응형
'Swift iOS 앱 개발 > iOS' 카테고리의 다른 글
[Swift iOS] OperationQueue에 대하여 (+ BlockOperation, AsyncOperation) (0) | 2023.02.20 |
---|---|
[Swift iOS] GCD와 Operation의 차이 (0) | 2023.02.15 |
[iOS GCD] DispatchGroup 디스패치 그룹 (0) | 2023.02.11 |
[iOS GCD] Concurrency 동시성 프로그래밍이란? + 왜 필요할까 (0) | 2023.02.10 |
[Swift GCD] GCD(Grand Central Dispatch) (0) | 2023.02.09 |