我有一个 NSMutableArray,我正在从多个线程访问/修改它。目前我正在做:
@synchronized(self.items)
{
[self.items addObject:anItem];
}
我想知道如果我不同步访问它,可能会出现什么问题?还是行为未定义?
谢谢!
我有一个 NSMutableArray,我正在从多个线程访问/修改它。目前我正在做:
@synchronized(self.items)
{
[self.items addObject:anItem];
}
我想知道如果我不同步访问它,可能会出现什么问题?还是行为未定义?
谢谢!
例如,您可以在一个线程上对其进行迭代,并在另一个线程上同时添加或从中删除 - 更改您已经传递的值或缺失值。如果幸运的话,它会引发异常。如果你不走运,它可能会损坏你的数据。
如果两个线程尝试同时添加到它,它也可能导致内存泄漏。add 有可能在一个线程上成功,同时也消除了对另一个线程上 add 的所有引用。
可能出错的细节取决于实现,这可能是不公开的。(或者它在达尔文源代码中可用?)但是这样想 - 实现可能涉及一个数组或类似的结构,它跟踪有多少项目并具有指向它们的指针。每个项目都有一个引用计数,在数组中时该计数必须 > 0。如果 2 个线程同时修改它们,所有这些数据位可能最终处于错误状态。