c++ 中 设计一个线程安全的map

来源:互联网 发布:如何理解软件定义网络 编辑:程序博客网 时间:2024/05/17 23:26

最近在写一个底层网络模块,由于同时有上万个连接,因此得设计一个保证线程安全且性能不错的map。

这时候我特别怀念java,它有一个线程安全的容器库,而C++不知为什么一直没有,只好自己设计一个了。

由于有数十万个连接,因此ConcurrentMap内部必须分多个map来保存数据,比如说每个子map负责两万个连接,当连接数超过两万个时,ConcurrentMap内部必须创建另外一个子map和互斥锁来处理,因为假如所有连接都用一个map和互斥锁来处理的话,显然效率太低了。这个时候你还需要一个hash算法来映射一下,决定放到哪个子map里,直接%10比较简单。

子map和互斥锁可以用两个vector来存储。

考虑到对map的查询和改写操作,可以加一个读写锁。

嗯,每个子map都对应一个读锁和写锁。

看情况吧,假如性能过得去的话就不用ConcurrentMap了,上述想法实现起来实在恶心了点。