나는 줄에 다음 코드를 여러 번 응용 프로그램 충돌을 실행하면 :dispatch_async 갱신 변수 충돌 - 스레드 안전
res.append (I)
오류가 치명적인 오류는 다음과 같습니다 부정적인 카운트 UnsafeMutablePointer.destroy 또는 포인터가 해제 됨 *** 디버깅 할 malloc_error_break에 중단 점 설정
dispatch_async에서 전역 변수를 업데이트하는 것이 올바르지 않습니까?
클래스의 ViewController : 배열에 쓰기, atomic
을 확인해야 할 때의 UIViewController {
var result = Array<Int>()
func method(completion: (inner:() throws -> String)->Void){
let group:dispatch_group_t = dispatch_group_create();
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
var res = Array<Int>()
for i in 0..<4 {
dispatch_group_async(group,queue){
res.append(i)
print(res)
print("Block\(i)");
var s = 0
for k in 0..<1000 {
s = 2+3
}
print("Block\(i)End");
}
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
print("All background tasks are done!!");
print(res)
}
override func viewDidLoad() {
super.viewDidLoad()
self.method() { (inner:() throws -> String) -> Void in
do {
let res = try inner()
print(res)
} catch let error {
print(error)
}
}
}
기본 멀티 스레딩 문제 - 특별히 언급하지 않는 한 DONT는 개체가 스레드로부터 안전하며 다중 스레드에서 업데이트하지 않는다고 가정합니다. –