【问题标题】:Timed locks in GCD?GCD中的定时锁?
【发布时间】:2012-11-08 19:58:57
【问题描述】:

用例

  1. 有很多请求需要处理。
  2. 处理每个请求所需的时间各不相同。
  3. 请求应该被同时处理(现在它们被推入由dispatch_get_global_queue 获得的全局队列中)。
  4. 来自同一客户端的请求最好应该同步处理,例如,carca1的处理应该在开始处理之前完成rca2,同时在处理rcb1rcd3等。
    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) 将不是最佳选择。

每个客户都有一个串行队列不能满足 5。


我知道GCD is based on a different paradigm,但在 GCD 中是否存在与 pthread_mutex_timedlocklockBeforeDateLock.tryLock 等效的内容?

如何使用 GCD 实现定时锁提供的功能?


Grand Central Dispatch (GCD) Reference

【问题讨论】:

    标签: c multithreading pthreads grand-central-dispatch


    【解决方案1】:

    您可以在 dispatch_semaphore 上设置下一个作业块并超时。但是,您需要等待作业提交,而不仅仅是作业执行……否则 GCD 将启动大量线程立即等待,这不是您想要的。

    【讨论】:

    • 是的,似乎dispatch_semaphores 是要走的路。在这种特殊情况下等待作业执行被证明是更好的,我们不希望来自同一个客户端的许多请求。等待作业提交会增加复杂性或使提交线程等待。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2010-09-09
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多