2012-11-20 21 views
0

使用案例GCD中的計時鎖?

  1. 有很多應該處理的請求。
  2. 處理每個請求所用的時間會有所不同。
  3. 請求是爲了同時處理(現在他們被推入dispatch_get_global_queue得到的全局隊列中)。
  4. 請求來自同一客戶端優選來應從CA進行同步處理,例如,RCA1的處理應該開始處理之前完成RCA2,同時RCB1rcd3,正在處理中。
    rca i:客戶的要求a。
  5. 如果處理請求時間過長,即超過TIME_OUT,則來自同一客戶端的其他請求可能開始處理。

使用dispatch_get_global_queue併爲每個客戶端一個串行隊列void dispatch_after( dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block)當完成RCA1處理,但when尚未到來將是最優的。

有每個客戶一個串行隊列並不能滿足5.


我知道,GCD is based on a different paradigm但有在GCD pthread_mutex_timedlocklockBeforeDateLock.tryLock任何等效?

如何使用GCD實現由定時鎖提供的功能?


Grand Central Dispatch (GCD) Reference

回答

0

你可能對一個有超時dispatch_semaphore接下來的工作塊。但是,您需要等待作業提交,但不僅僅是作業執行,否則GCD將啓動大量立即等待的線程,這不是您想要的。

+0

是的,好像'dispatch_semaphore's是要走的路。 在這種特殊情況下,等待工作執行證明效果更好,我們並不期望來自同一客戶的許多請求。等待提交作業會增加複雜性或使提交線程等待。 – user454322