Ste*_*eve 18 c++ algorithm dictionary lock-free
我们正在开发一个基于C/S的网络应用程序,我们发现有太多的锁添加到std :: map,服务器的性能变差了.
我想知道是否有可能实现无锁地图,如果有,怎么样?那里有开源代码吗?
编辑:实际上我们使用std :: map来存储套接字信息,我们根据套接字文件描述进行了封装,以包含一些其他必要的信息,如ip地址,端口,套接字类型,tcp或udp等.
总结一下,我们有一张全球地图说它是
map<int fileDescriptor, socketInfor*> SocketsMap,
Run Code Online (Sandbox Code Playgroud)
那么每个用于发送数据的线程都需要访问SocketsMap,并且他们必须在从SocketsMap读取或写入SocketsMap之前添加互斥锁,因此整个应用程序的并发级别会因为添加到SocketsMap的锁定而大大减少.
为了避免并发级问题,我们有两个解决方案:1.分别存储每个socketInfor*2.使用某种无锁映射.
我想找到某种无锁映射,因为此解决方案所需的代码更改远小于解决方案1所需的代码更改.