【问题标题】:Need suggestion on multiple writer thread , single worker thread model需要关于多写线程、单工作线程模型的建议
【发布时间】:2015-11-02 15:53:36
【问题描述】:

我正在用 C 编写代码,其中我有多个写入器(或馈送器)线程,它们写入高优先级队列或低优先级队列,以及一个从高优先级队列和低优先级队列读取的工作线程(或消费者)线程排队。

我有一个使用 pthread 互斥锁的线程同步机制。

在编写此代码时,我有一个疑问,即我是否应该为高优先级队列和低优先级队列设置单独的锁? 或者我应该为高优先级和低优先级队列设置一个公共锁。

【问题讨论】:

  • 发布您的代码。有一些方法可以在没有任何锁的情况下做到这一点。
  • 它现在的方式太宽泛了。发布细节,最好是代码,如果你能以简洁易懂的形式获得它。
  • 请找到伪代码,因为我无法粘贴确切的代码。
  • typedef struct globals_s { /* 馈线线程 / pthread_t thread_A; pthread_t 线程_B; pthread_t 线程_C; /工作线程/pthread_t thread_W; //i> 队列和同步 / dbl_qhead_t work_q[WORKER_WORK_Q_MAX]; pthread_mutex_t work_q_mutex[WORKER_WORK_Q_MAX]; pthread_cond_t work_q_cond[WORKER_WORK_Q_MAX]; / 用于同步初始化 */ pthread_mutex_t init_mutex; pthread_cond_t init_cond; } globals_t;
  • 对不起,我无法发布代码,它很大。我如何粘贴该代码?

标签: c multithreading


【解决方案1】:

在编写此代码时,我有一个疑问,即我是否应该为高优先级队列和低优先级队列设置单独的锁?或者我应该为高优先级和低优先级队列设置一个公共锁。

两个锁将允许同时写入高优先级和低优先级队列。单个锁不会。此外,在从 either 队列中读取项目时,单个锁将阻止写入 两个队列。因此,对于 writes 来说,两个锁的性能要好于一个,因为锁争用较少。对于队列 read 性能,一个锁比两个锁更容易实现,但性能相似。

【讨论】:

    【解决方案2】:

    我建议只使用一个锁,因为它使实现更简单,并且由于更简单的实现可能会带来更好的性能。使用单个锁,读取器实现只是:

    1. 获取锁。

    2. 检查高优先级队列,如果有工作,将工作从队列中取出,解锁,做工作,然后进入步骤1。

    3. 检查低优先级队列,如果有工作,将工作从队列中取出,解锁,做工作,然后转到步骤1。

    4. 阻止单个条件变量。

    5. 转到步骤 1。

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 1970-01-01
      • 2010-12-26
      • 2014-12-05
      • 2017-05-28
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多