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

来源:互联网 发布:兰州知豆招聘信息 编辑:程序博客网 时间:2024/06/10 07:09
 

比如对于一个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的

生存期。

原创粉丝点击