【发布时间】:2015-10-18 12:47:01
【问题描述】:
方法1:
- (void) method1
{
[_condition lock];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_MSEC)), dispatch_get_main_queue(), ^{
//Fetach data from remote, when finished call method2
[self fetchData];
});
[_condition waitUntilDate:[NSDate dateWithTimeIntervalSinceNow:30.0]];
// Do something.
[_condition unlock];
}
方法2:
- (void) method2
{
[_condition lock];
[_condition signal];
[_condition unlock];
}
如果 线程 1 在方法 1 中,通过执行 [_condition waitUtilDate ...]; 来解锁它的锁。 线程 2 进入该区域并通过执行[_condition waitUtilDate ...] 来等待条件。
Thread 1 和 Thread 2 都将 Block(request 1 request 2) 排入队列以获取相同的来自远程的数据。当 request 1 完成时,它会调用 method2 来发出_condition:
我的问题是:
- 线程 1 还是 线程 2 将发出信号?
- 因为 request 1 和 request 2 正在做同样的事情,我可以向两个线程发出信号(
broadcast)并取消 request 2 请求 1 完成时。但是,更好的方法是在request 1发出后,拒绝Thread 2进入临界区。但是在进入关键区域之前我无法锁定两次。那么我能做什么呢?
谢谢。
【问题讨论】:
标签: objective-c locking signals nscondition ios-multithreading