我遇到了线程安全问题。我有一个队列,当我修改内容时会导致跨线程出错。我以前没有用过锁,但我想我试试。我在所有为我的队列操作支持 NSMutableArray 的代码周围添加了一个锁。我认为,问题在于我没有为所有人使用相同的锁。我在每个修改数组的方法中创建了一个新的 NSLock 实例。我假设我应该使用一个 NSLock ivar 来保护阵列。但我的困惑来自于我添加它后它就起作用了。下面是一个示例。我假设在任何地方我创建了一个新的 NSLock,我应该只使用一个 ivar NSLock。我认为这段代码只是将入队锁定在其他入队和出队对其他出队而不是入队对出队。澄清会很棒。
@implmentation
...
- (void)enqueue:(id)obj
{
NSLock *arrayLock = [[NSLock alloc] init];
[arrayLock lock];
[_backingStore addObject:obj];
[arrayLock unlock];
}
- (id)dequeue
{
NSLock *arrayLock = [[NSLock alloc] init];
[arrayLock lock];
id result = [_backingStore firstObject];
if( result )
{
[_backingStore removeObjectAtIndex:0];
}
[arrayLock unlock];
return result;
}
...
@end