姬長信(Redy)

是否可以在C中实现无锁地图


我们正在开发一个基于C / S的网络应用程序,我们发现有太多的锁添加到std :: map,服务器的性能变差了.

我想知道是否可以实现无锁地图,如果有,怎么样?那里有开源代码吗?

编辑:
实际上我们使用std :: map来存储套接字信息,我们根据套接字文件描述进行了封装,以包含一些其他必要的信息,如ip地址,端口,套接字类型,tcp或udp等.

总结一下,我们有一张全球地图说它是

map SocketsMap, 

那么用于发送数据的每个线程都需要访问SocketsMap,并且他们必须在从SocketsMap读取或写入SocketsMap之前添加互斥锁,因此整个应用程序的并发级别将因为添加到SocketsMap的锁定而大大减少.

为了避免并发级问题,我们有两个解决方案:1.分别存储每个socketInfor * 2.使用某种无锁映射.

我想找到某种无锁映射,因为此解决方案所需的代码更改远小于解决方案1所需的代码更改.