代码同步 - 防止块执行

时间:2013-07-14 23:25:24

标签: ios objective-c synchronization

我有一个-(void) downloadFile方法,可以从多个线程调用。 我想创建一种情况,只有一个线程可以执行该方法 - 第一个已准备好的线程;其他线程应该跳过调用并继续他们的其他工作(不阻塞\等待任何事情)。

我应该使用什么机制来实现这一目标?

1 个答案:

答案 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。