勤能补拙,Expter

成都游戏Coder,记录游戏开发过程的笔记和心得!

一个关于vector在读取和压入技巧性的效率优化

         在多线程过程中,对于线程间的数据共享同步问题,具体针对多线程需要对一个Vector进行读与写的操作,不考虑缓冲区的操作,一般情况下为了保证稳定性的同时在读写的时候都要进行加锁,其实可以通过一个技巧,就是通过一个临时变量在写数据的时候把第一个值付给临时变量,那么在读取数据的线程中会直接读取临时变量,此时只需要加锁一次即可。



         我写了一个测试例子,就是关于开3个读,写,删的操作。。。一般情况进行加锁,与通过通过临时变量来减少一次加锁速度与效率明显低于后者。
         针对1000000个数据的操作,操作1比操作2快2倍以上。


         下面是我的测试代码,简单。。。只是为了说明问题
         
/Files/expter/l_thread.rar
        

posted on 2009-08-14 23:52 expter 阅读(2220) 评论(5)  编辑 收藏 引用

评论

# re: 一个关于vector在读取和压入技巧性的效率优化 2009-08-15 01:47 pear_li

说实话,楼主这个想法不怎么样
看过你的代码就更加确信了这一想法
理由如下:
既然要满足读写,就要考虑读写值的实时,临时变量本身就不能确保当前读写值的实时性(且不说楼主对tmp和flag的操作连最基本的volatile都没有加),你的想法只是考虑变量读写的安全性,而忽略实时性

公认比较安全快速的做法:使用共享锁,提高读取效率

  回复  更多评论   

# re: 一个关于vector在读取和压入技巧性的效率优化 2009-08-15 06:38 空明流转

楼主的思路,和Lock-free有点接近,建议去参考一下。。。  回复  更多评论   

# re: 一个关于vector在读取和压入技巧性的效率优化 2009-08-15 16:42 expter

@pear_li
我只是 为了说明这样一个方法,可能在有些地方效率会更低,而且程序我只是一个为了测试而已,估计没有考虑跟多,谢谢指出。  回复  更多评论   

# re: 一个关于vector在读取和压入技巧性的效率优化 2009-08-15 16:53 李侃

同意2楼,共享资源传统的方式最好使用共享锁和排他锁,分而治之,可以参考读写锁的实现方法win32下单进程内建议使用用户模式,interlock系列函数足以

锁无关数据结构我还没找到很好的解决方案  回复  更多评论   

# re: 一个关于vector在读取和压入技巧性的效率优化 2009-08-20 21:28 hlysh

常常关注你的blog,每篇文章都很好支持!  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理