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