我们正在开发基于C/S的网络应用程序,我们发现std::map中添加了太多锁,导致服务器性能变差。
我想知道是否可以实现无锁映射,如果可以,怎么办?那里有开源代码吗?
编辑:
实际上,我们使用std::map来存储套接字信息,我们基于套接字文件描述进行了封装,以包括一些其他必要的信息,例如ip地址,端口,套接字类型,tcp或udp等。
总而言之,我们有一张全局 map 说
map<int fileDescriptor, socketInfor*> SocketsMap,
那么每个用于发送数据的线程都需要访问SocketsMap,并且它们必须在从SocketsMap读取或写入SocketsMap之前添加互斥量,因此,由于向SocketsMap添加了如此多的锁,整个应用程序的并发级别将大大降低。
为了避免并发级别问题,我们有两种解决方案:1.分别存储每个socketInfor * 2.使用某种无锁映射。
我想找到某种无锁映射,因为此解决方案所需的代码更改比解决方案1少得多。
最佳答案
实际上,有一种方法,尽管我自己还没有实现,但是有一篇著名的C++专家Andrei Alexandrescu撰写的有关lock free map using hazard pointers的论文。