方法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 ...]
。
线程 1和线程 2都将一个块(请求 1 请求 2)排入队列以从远程获取相同的数据。当请求 1完成时,它调用方法 2 来发出 _condition 信号:
我的问题是:
- 哪个会发出信号,线程 1或线程 2?
- 因为请求 1和请求 2做同样的事情,我可以在请求 1完成时向两个线程(
broadcast
)发出信号并取消请求 2 。但是,更好的方法是在请求 1发出后,拒绝线程 2进入临界区 。但是在进入关键区域之前我无法锁定两次。那么我能做什么呢?
谢谢。