其他分享
首页 > 其他分享> > 是否可以在C中实现无锁地图

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

作者:互联网

我们正在开发一个基于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的lock free map using hazard pointers的论文.

标签:lock-free,c,algorithm,dictionary
来源: https://codeday.me/bug/20190926/1822030.html