假设我有一个可变数组,其中包含变量中的一些对象array
。
A
让我们从我做的线程说:
NSArray *arrayCopy = [array copy];
并从线程B
:
[array addObject:NSNull.null];
安全吗?array
具体来说,这段代码是否会因为复制时的潜在修改而崩溃?
假设我有一个可变数组,其中包含变量中的一些对象array
。
A
让我们从我做的线程说:
NSArray *arrayCopy = [array copy];
并从线程B
:
[array addObject:NSNull.null];
安全吗?array
具体来说,这段代码是否会因为复制时的潜在修改而崩溃?
Apple 表示 NSMutableArray 不是线程安全的。但是,如果您在一个线程中添加对象并在另一个线程中复制,它不会崩溃。如果你从不同的线程添加对象,它会崩溃。
import Foundation
import XCPlayground
var array = NSMutableArray()
var queues = [NSOperationQueue]()
let syncQueue = NSOperationQueue()
syncQueue.maxConcurrentOperationCount = 1
for i in 0..<100 {
let queue = NSOperationQueue()
queue.maxConcurrentOperationCount = 1
queues.append(queue)
queue.addOperationWithBlock({
for j in 0..<100000 {
if j == 0 {
sleep(1)
} else {
usleep(j < 5 ? 100 : rand() % 10 == 0 ? 1 : 0)
}
if i % 2 == 0 {
syncQueue.addOperationWithBlock({
array.addObject(NSNumber(int: rand()))
})
} else {
var copy = array.copy()
}
}
})
}
XCPSetExecutionShouldContinueIndefinitely()
但是,我没有找到将对其进行描述的文档(该复制函数在 NSMutableArray 上是线程安全的)。如果有人提供链接,我将不胜感激。