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!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

First Snowflakes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值