Search
Duplicate

동시성 프로그래밍과 관련된 문제점 / 해결방법

Created
2023/07/12 01:41
Tags
태그
Concurrency

동시성 프로그래밍과 관련된 문제점

1. 경쟁상황 / 경쟁조건 (Race Condition)

Thread-safe 하지 않음 → 경쟁 상황 (Race Condition)이라고도 표현
멀티쓰레드의 환경에서, 같은 시점에 여러 개의 쓰레드에서 하나의 메모리에 동시접근 하는 문제

2. 교착상태 (DeadLocks)

멀티쓰레드의 환경에서, 배타적인 메모리 사용으로 일이 진행이 안되는 문제
2개 이상의 쓰레드가 서로 배타적인 메모리의 사용으로 인해(서로 잠그고 점유하려고 하면서) 메서드의 작업이 종료도 못하고 일의 진행이 멈춰버리는 상태

해결 방법

같은 시점에 동시에 접근 못하도록 Lock → Thread-Safe 처리

동시큐에서 직렬큐로 보내기

Thread-safe하지 않을 때, 처리하는 방법
// 배열은 여러쓰레드에서 동시에 접근하면 문제가 생길 수 있다. var array = [String]() let serialQueue = DispatchQueue(label: "serial") for i in 1...20 { DispatchQueue.global().async { print("\(i)") //array.append("\(i)") // <===== 동시큐에서 실행하면 동시다발적으로 배열의 메모리에 접근 serialQueue.async { // 올바른 처리 ⭐️ array.append("\(i)") } } } // 5초후에 배열 확인하고 싶은 코드 일뿐... DispatchQueue.main.asyncAfter(deadline: .now() + 5) { print(array) //PlaygroundPage.current.finishExecution() }
Swift
복사