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