我想知道在方法的上下文中如何使对一个 __block
修饰的变量的访问线程安全。
例如:
__block NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
for (int i=0; i<20; i++) {
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
[dictionary setObject:@"test" forKey:@"test"];
}];
[someConcurrentQueue addOperation:operation];
}
这里将操作添加到并发队列中,dictionary
变量可能会同时被不同的线程访问。
这样安全吗?如果不安全,如何确保对dictionary
的访问是安全的?
__block
,因为你并没有更改dictionary
所指向的对象,只是更改了对象内部的属性。至于并发问题,除了显而易见的解决方案——使用串行队列或将不安全的操作包装在另一个块中,并将其调度到单个串行队列中,我不确定是否还有其他解决方案。 - UIAdam