DispatchSemaphore처럼 동시성 프로그래밍의 Race Condition의 문제를 해결하기 위한 swift 타입이다.
다중 스레드가 하나의 자원에 동시적으로 접근을 하면 아래와 같은 현상이 발생한다.
Array가 Tread-Unsafe하기 때문이다.
import Foundation
var cards = Array(1...9)
let getCard = {
for _ in 1...3 {
let card = cards.removeFirst()
print(card)
sleep(1)
}
}
var operation = BlockOperation()
for _ in 1...3 {
operation.addExecutionBlock {
getCard()
}
}
operation.start()