オブジェクトのダウンロードを開始するメソッドがあり、任意のスレッドから呼び出すことができますが、ダウンロードが一意であることを確認したい、つまり、同じオブジェクトがある場合は別のダウンロードを開始しないとします。すでに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
?
性能面での違いはありますか?最善の戦略は何でしょうか?