キューは呼び出し元からの引数です。入力dispatch_queue_tのタイプ(シリアルまたは同時)を知りたいのは、それを別の方法で処理するからです。
出来ますか?それを確認する方法は?
キューは呼び出し元からの引数です。入力dispatch_queue_tのタイプ(シリアルまたは同時)を知りたいのは、それを別の方法で処理するからです。
出来ますか?それを確認する方法は?
GCD で任意の呼び出し元が提供するキューでシリアル化された実行を保証する慣用的な方法は、独自のシリアル キューを作成し、呼び出し元が提供するキューをキューのターゲット キューに設定することです (dispatch_set_target_queue(3) API を使用)。
あなたが持っているのがdispatch_queue_t
「他の誰か」から渡されたものだけである場合、あなたが知る方法はありません. その情報は効果的に隠されています。自分でキューを作成している場合は、 and を使用dispatch_queue_set_specific
し
dispatch_queue_get_specific
てキューのコンテキスト データに値を格納し、それを読み戻すことができますが、キューを作成していない場合は運が悪いです。
FWIW、この種の脆弱なデザイン/アンチパターンを示唆しています。パラメータとしてキューを使用することは、そのキューでの将来の実行のためにブロックをスケジュールすることを意味します。その観点から、キューが同時かシリアルかは問題ではありません。
さらに言えば、シリアルまたは同時キューで実行されるかどうかが問題にならないように、コードを記述する必要があります。共有リソースを使用する場合は、それらのリソースへのアクセスを同期して、同時キューで実行された場合にそれらのリソースへのアクセスが安全になるようにする必要があります。dispatch_sync
逆に、シリアル キューでの実行が問題になるような状況は避けてください (つまり、シリアルである可能性のあるキューを使用して、再帰的なロックを達成しようとしないでください)。