5个生产者线程 5个消费者线程 共同操作一个vector 如何提高效率

 

面试题目:

有5个生产者线程,5个消费者线程,有一个它们公共访问的资源,使用vector存储了这些资源, 生产者用于生产资源,消费者用于消耗资源,消费者也会从容器中进行删除动作。 当前的方案是使用一个互斥锁对vector进行保护,生产者、消费者线程在访问资源之前必须先获得锁。 但是,生产者、消费者的并发频率非常高,锁导致了效率低下,请给出提高效率的方案。


1)面试时相出来的想法:

用10个vector, 每个生产者使用固定的两个,生产线程先向其中一个vector放数据,放满后再向另一个放,然后,所有的消费者线程只从当前没有正被操作的vector中取数据。

-- 只是提出了一个思路,interviewer说可以! 想法的重要性啊。 

这种方案的有点应该是使得锁的粒度更小了,有利于提高并发性。


2)  面试时相出来的想法:

为生产者和消费者划分时间片,两者轮转,以解决生产者和消费者之间的竞争。    ---  不行!被否!


3)其他想法:

更换数据结构,例如使用一个队列,生产者线程向队头放,消费者从对尾取。--- 由此,想到c++并发编程书籍中提到的无锁结构!经查阅,这是一种需要仔细学习的c++ 领域。

《C++ Concurrency in Action 2nd Edition》very good!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章