使用具有两个视图控制器的相同NSLock

时间:2012-11-29 18:37:43

标签: objective-c xcode concurrency nsthread

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

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

ViewControllerOne:

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

ViewControllerTwo:

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

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

我在这里缺少什么?做这样的事情还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

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