一尘不染

是否可以在C ++中实现无锁映射

algorithm

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

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

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

总而言之,我们有一张全球地图说

map<int fileDescriptor, socketInfor*> SocketsMap,

那么每个用于发送数据的线程都需要访问SocketsMap,并且它们必须在从SocketsMap读取或写入SocketsMap之前添加互斥锁,因此,由于向SocketsMap添加了如此多的锁,整个应用程序的并发级别将大大降低。

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

我想找到某种无锁映射,因为此解决方案所需的代码更改比解决方案1少得多。


阅读 140

收藏
2020-07-28

共1个答案

一尘不染

实际上,有一种方法,尽管我自己还没有实现,但是在无锁地图上有一篇论文,使用了著名C
++专家Andrei
Alexandrescu的危险指针

2020-07-28