ユースケース:
- 処理しなければならない要求がたくさんあります。
- 各リクエストの処理にかかる時間は異なります。
- リクエストは同時に処理されることを意図しています (現在、リクエストは によって取得されたグローバル キューにプッシュされます
dispatch_get_global_queue
)。 - 同じクライアントからのリクエストは、できれば同期的に処理する必要があります。たとえば、caからのrca1の処理は、 rca2の処理を開始する前に終了する必要があります。同時に、 rcb1、rcd3などが処理されます。
rca i : クライアント a からの要求。
- リクエストの処理に時間がかかりすぎる場合、つまり を超える場合
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 を使用して時限ロックによって提供される機能を実装する方法は?