利用读写锁和智能指针来实现多线程下对资源的多个地方读和多个地方写的实现。

 

比如对于一个list<T>,我们有时需要在多个线程里对它进行访问(读操作),但在其他的线

程有可能对他进行删除和添加操作(写操作)。所以要对list进行保护。

有以下几种处理方法
1,直接对list进行加锁方式,不管是读操作还是写操作。但这样一来效率就低了。因为在只

有读操作的情况下,几个线程同时读是不需要加锁的。
2,读写锁的方式。这是最常用的方法,网上相关介绍很多。不再赘述。
3,智能指针方式。(以boost::shared_ptr为例说明)
   这种方式是对第一种方式的一种优化。假定有三个线程(t1,t2,t3)需要同时读。我们首先

定义三个list<boost::shared_ptr<T> >变量sp1,sp2,sp3,然后再定义三个锁

lock1,lock2,lock3分别对sp1,sp2,sp3进行锁定操作。在对sp1,sp2,sp3读写操作时分别用各

自的锁锁定。这样一来三个线程的读操作是同时进行的。而利用智能指针来控制list里的T的

生存期。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值