需要多个编写器线程,单个工作线程模型的建议

时间:2015-11-02 15:53:37

标签: c multithreading

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

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

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

2 个答案:

答案 0 :(得分:-1)

  

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

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

答案 1 :(得分:-1)

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

  1. 获取锁定。

  2. 检查高优先级队列,如果有工作,请将工作从队列中取出,解锁,完成工作,然后转到步骤1.

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

  4. 阻止单个条件变量。

  5. 转到第1步。