强制主线程中的操作或使用同步是否更好?

时间:2012-10-12 13:35:27

标签: ios multithreading synchronization atomicity

假设我有一个开始下载对象的方法,可以从任何线程调用,但我想确保下载是唯一的,也就是说,我不会为同一个对象启动另一个下载如果已经有一个。

强制方法在主线程上执行以确保数据一致性(知道下载是否会异步)是否更好?

- (void)download
{
    dispatch_async(dispatch_get_main_queue(), ^{
        if (isDownloading == NO) {
            // Some preparation
            isDownloading = YES;
            // Launch asynchronous download
        }
    });
}

或使用阻止同步机制?

- (void)download
{
    @synchronize(self) {
        if (isDownloading == NO) {
            // Some preparation
            isDownloading = YES;
            // Launch asynchronous download
        }
    });
}

或在OSAtomicCompareAndSwap ivar上使用isDownloading之类的操作?

表演有不同之处吗?什么是最好的策略?

0 个答案:

没有答案