我们正在开发一个基于C/S的网络应用程序,我们发现std::map添加了太多的锁,导致服务器的性能变差。
我想知道是否可以实现无锁映射,如果可以,如何实现?那里有开源代码吗?
编辑:
实际上我们使用std::map来存储socket信息,我们根据socket文件描述进行封装,包括一些其他必要的信息,如ip地址、端口、socket类型、tcp或udp等。
总而言之,我们有一张全球地图
map<int fileDescriptor, socketInfor*> SocketsMap,
那么每个用于发送数据的线程都需要访问SocketsMap,并且在从SocketsMap读取或写入SocketsMap之前都必须添加互斥锁,这样整个应用程序的并发水平就会因为向SocketsMap添加如此多的锁而大大降低。
为了避免并发级别问题,我们有两种解决方案:1.单独存储每个socketInfor* 2.使用某种无锁映射。
我想找到某种无锁的映射,因为该解决方案所需的代码更改比解决方案1要少得多。
其实是有办法的,虽然我自己没有实现过,但是有一篇论文介绍了使用危险指针锁定免费地图 http://erdani.com/publications/cuj-2004-12.pdf来自著名 C++ 专家 Andrei Alexandrescu。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)