非メインキューGCDキューを理解している限り、デフォルトでは、シングルコアCPUを搭載したデバイスでのみシリアルになります。ただし、デバイスに複数のコアがある場合、キュー内のブロックが同時に実行される可能性があります。
いくつかの同時実行の問題を克服するためにシリアルGCDキューを使用したいのですが、複数のコアがある場合でも、このキューはシリアルである必要があります。
開発者は、これはどういうわけか可能であると述べました。このような常時シリアルキューを作成するにはどうすればよいですか?
非メインキューGCDキューを理解している限り、デフォルトでは、シングルコアCPUを搭載したデバイスでのみシリアルになります。ただし、デバイスに複数のコアがある場合、キュー内のブロックが同時に実行される可能性があります。
いくつかの同時実行の問題を克服するためにシリアルGCDキューを使用したいのですが、複数のコアがある場合でも、このキューはシリアルである必要があります。
開発者は、これはどういうわけか可能であると述べました。このような常時シリアルキューを作成するにはどうすればよいですか?
関数で取得できる標準のGCDキューdispatch_get_global_queue
は確かに同時です。
ただし、 dispatch_queue_create関数を使用してカスタムgcdキューを作成できます。2番目のパラメーターとして渡しDISPATCH_QUEUE_SERIAL
、そのキューをシリアルとして作成します。
並行キューを作成するには:
dispatch_queue_t concurrentQueue = dispatch_queue_create("com.aj.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
シリアルキューを作成するには:
dispatch_queue_t serialQueue = dispatch_queue_create("com.aj.serial.queue", DISPATCH_QUEUE_SERIAL);