【发布时间】:2016-03-07 02:30:51
【问题描述】:
NSMutableArray 不是线程安全的,但我不明白为什么只要同时操作不同的索引,它们就不能设计为线程安全的。例如。索引 1 指向 X 类的一个实例,索引 2 指向另一个实例。允许同时操作这两个对象不是很有效吗?当我使用 GCD 时是否允许这样做,或者当我更改不同索引指向的对象时是否需要使用调度屏障?
【问题讨论】:
-
您希望对数组进行哪些操作?
-
数组的每个元素都指向一个“照片”对象。最初,只有类的 URL 和名称属性是已知的。然后我开始下载 URL 的图像,然后对接收到的图像数据应用一些过滤器。下载是并行进行的。当每个 DL 完成时,会执行一个完成块,将接收到的数据存储在该类的一个属性中,然后执行过滤操作并将过滤后的数据存储在该类的另一个属性中。即使我在没有调度障碍的并发 Q 中运行它,我也没有看到崩溃。 bcos 这样的操作可以吗?
-
你正在做的很好。并发读取是安全的,当您操作数组包含的对象时,您并没有在操作数组。
-
谢谢,阿维。这是否意味着只需要使用“屏障”保护阵列中的添加或删除?或者当然,从两个线程操作数组指向的同一个对象(例如,在我的例子中,需要保护两个线程更改给定数组索引指向的“照片”对象)?
标签: ios objective-c multithreading thread-safety grand-central-dispatch