私のアプリはクラウドデータベースとコアデータの間で多くの同期を行う必要があり、これはさまざまな方法で発生します。私は単純なバックグラウンドスレッドを使用してこれを行います:
dispatch_queue_t backgroundThread = dispatch_queue_create("background thread", NULL);
dispatch_async(backgroundThread, ^{ ...
ただし、アプリで処理を高速に行うと、異なる同期タスクが同時に発生する可能性があり、意図しない結果が生じる可能性があります。
したがって、すべての同期タスクを1つのスレッドでシリアルに実行したいと思います。同期タスクを実行する必要があるときはいつでも、専用スレッドにディスパッチし、そのスレッドが以前に送信されたすべてのタスクを完了するまで実行されないようにします。どのように管理すればよいですか?具体的には...
この状況に直接対処する答えを見つけることができませんでした。これ(iOSデータ処理に単一の共有バックグラウンドスレッドを使用していますか?)は近づきましたが、避けました。
御時間ありがとうございます。
次のような静的関数を介してキューにアクセスします。
static dispatch_queue_t my_serial_queue() {
static dispatch_queue_t s_serial_queue;
static dispatch_once_t s_done;
dispatch_once(&s_done, ^{s_serial_queue = dispatch_queue_create("com.app.my_queue_name", DISPATCH_QUEUE_SERIAL);});
return s_serial_queue;
}
次に、このように使用します...
dispatch_sync(my_serial_queue(), ^{
//do something here
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加