0

ユースケース:

  1. 処理しなければならない要求がたくさんあります。
  2. 各リクエストの処理にかかる時間は異なります。
  3. リクエストは同時に処理されることを意図しています (現在、リクエストは によって取得されたグローバル キューにプッシュされますdispatch_get_global_queue)。
  4. 同じクライアントからのリクエストは、できれば同期的に処理する必要があります。たとえば、caからのrca1の処理は、 rca2の処理を​​開始する前に終了する必要があります。同時に、 rcb1rcd3などが処理されます。 rca i : クライアント a からの要求。
  5. リクエストの処理に時間がかかりすぎる場合、つまり を超える場合TIME_OUT、同じクライアントからの他のリクエストが処理を開始できます。

rca1 処理が完了したが、まだ到着していない 場合、クライアントごとdispatch_get_global_queueにシリアル キューを使用するのは最適ではありません。void dispatch_after( dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block)when

顧客ごとにシリアル キューを持つことは、5 を満足させません。


GCD が別のパラダイムに基づいていることは承知していますが、GCD にpthread_mutex_timedlockまたはlockBeforeDateまたはLock.tryLockに相当するものはありますか?

GCD を使用して時限ロックによって提供される機能を実装する方法は?


グランド セントラル ディスパッチ (GCD) リファレンス

4

1 に答える 1

0

タイムアウト付きのdispatch_semaphoreで次のジョブブロックを持つことができます。ただし、ジョブの実行だけでなく、ジョブの送信を待機する必要があります...そうしないと、GCDはすぐに待機する大量のスレッドをスピンアップしますが、これは望ましくありません。

于 2012-12-09T19:40:08.887 に答える