2012-11-20 2 views
0

사용 사례 :GCD의 시간 제한 잠금 장치입니까?

  1. 처리되어야 요청이 많이 있습니다.
  2. 각 요청을 처리하는 데 소요되는 시간은 다양합니다.
  3. 요청은 동시 처리됩니다 (이제는 글로벌 대기열에 넣은 dispatch_get_global_queue으로 푸시됩니다). 동일한 클라이언트 바람직
  4. 요청 CA에서 처리 rca1의 예 기적으로 처리되어야 동시에 rca2 개시 처리 전에 완료되어야 rcb1, rcd3, 등이 처리 중입니다.
    rca i : 클라이언트로부터의 요청 a.
  5. 요청 처리가 너무 오래 걸리는 경우 (즉, TIME_OUT 초과) 동일한 클라이언트의 다른 요청이 처리를 시작할 수 있습니다. rca1 처리가 완료되지만 when이 아직 도착하지 않은 경우 차선책이 될 것 dispatch_get_global_queue 및 각 클라이언트에 대해 직렬 큐 void dispatch_after( dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block)를 사용

.

내가 GCD is based on a different paradigm 것을 알고 있어요하지만 GCD에 pthread_mutex_timedlock 또는 lockBeforeDate 또는 Lock.tryLock의 동등한이 5


고객 당 직렬 큐 만족하지 않을 있습니까?

GCD를 사용하여 시간 제한 잠금 기능을 구현하는 방법은 무엇입니까?


Grand Central Dispatch (GCD) Reference

답변

0

당신은 시간 제한이있는 dispatch_semaphore에서 다음 작업 블록을 가질 수 있습니다. 작업 제출뿐만 아니라 작업 제출을 기다릴 필요가 있습니다. 그렇지 않으면 GCD가 즉시 기다리는 많은 스레드를 회전시킵니다. 이는 원하는 작업이 아닙니다.

+0

그래,'dispatch_semaphore's가 갈 길입니다. 작업 실행을 기다리는이 특별한 경우에 더 나은 것으로 판명되었으므로 동일한 클라이언트의 많은 요청을 기대하지 않습니다. 작업 제출을 기다리면 복잡성이 증가하거나 제출 스레드가 대기하게됩니다. – user454322