我有一个-(void) downloadFile
方法,可以从多个线程调用。
我想创建一种情况,只有一个线程可以执行该方法 - 第一个已准备好的线程;其他线程应该跳过调用并继续他们的其他工作(不阻塞\等待任何事情)。
我应该使用什么机制来实现这一目标?
答案 0 :(得分:0)
这是实现这一目标的简单方法。
BOOL _firstToAttempt; // in a scope all threads can access
...
_firstToAttempt = YES; // before any of the threads start
...
// when a thread is ready to download
BOOL shouldDownload = NO;
@synchronize (self)
{
if (_firstToAttempt)
{
_firstToAttempt = NO;
shouldDownload = YES;
}
}
if (shouldDownload) [self downloadFile];
确保为@synchronize使用相同的对象。 self
可能是不同线程的不同对象,具体取决于您的实现。如果不方便,只需使用NSLock。