DPDK 自身有一套哈希表的实现,在 rte_hash.h 和 rte_hash.c 中。但是由于DPDK 基于 C 语言实现,因此不具备 C++ 模板和类的强大特性。在 C 语言实现的 rte_hash 中,rte_hash 结构体中用指针的形式存储了哈希函数,如果将 rte_hash 放在共享内存中,由于指针无法共享,用户需要自行计算哈希值,然后调用其他的接口将元素插入到哈希表中。总之,rte_hash 不是为了共享而设计的,所以无法满足共享的需求。
为了能够实现共享哈希表,我用 C++ 实现了一套基于 DPDK 的共享哈希表,它具有如下特性:
1. 模板化,可以容纳任意的数据类型。
2. 当哈希表满了的时候,可以自动扩容。
3. 加锁保证多进程访问共享数据的安全性。加锁采用最小粒度的加锁,以实现最高的效率。
4. 接口简单,易于使用。类似于 std::hash_map 的接口。但是对于多线程环境采取了一些特殊处理,以防止客户程序随意修改哈希表的内容。
5. 源代码遵从 GPL 开源,任何人可