0

我遇到了对 XML 文件的读取和写入操作(由两个不同的线程和两个不同的视图控制器完成)重叠的情况。

我尝试了以下逻辑以将相同的 NSLock 与两个视图控制器一起使用:

视图控制器一:

(on a background thread using dispatch_async)
- (void)writeToXML {
    // get xmlLock (lock declared globally)
    // write
    // unlock
}

视图控制器二:

(on the main thread)
- (void)readFromXML {
    // get xmlLock (lock referenced from ControllerOne)
    // read
    // unlock
}

但是,在调试时,我注意到即使 ControllerOne 锁定了 xmlLock,ControllerTwo 仍然能够获取它。

我在这里想念什么?另外,有没有更好的方法来做这样的事情?

4

1 回答 1

1

你确定它是同一个 NSLock 实例吗?无论如何,似乎更好的方法可能是为此设置一个调度队列;readFromXML 可以 dispatch_sync 到它上面,而 writeToXML 可以 dispatch_async 到它上面。

于 2012-11-29T18:45:39.570 回答