1

オブジェクトのダウンロードを開始するメソッドがあり、任意のスレッドから呼び出すことができますが、ダウンロードが一意であることを確認したい、つまり、同じオブジェクトがある場合は別のダウンロードを開始しないとします。すでに1つ。

データの一貫性を確保するために、メソッドをメイン スレッドで強制的に実行する方がよいでしょうか (とにかくダウンロードが非同期になることがわかっている場合)。

- (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
        }
    });
}

またはivarOSAtomicCompareAndSwapのような操作を使用するにはisDownloading

性能面での違いはありますか?最善の戦略は何でしょうか?

4

0 に答える 0