c++ 中 设计一个线程安全的map
来源:互联网 发布:如何理解软件定义网络 编辑:程序博客网 时间:2024/05/17 23:26
最近在写一个底层网络模块,由于同时有上万个连接,因此得设计一个保证线程安全且性能不错的map。
这时候我特别怀念java,它有一个线程安全的容器库,而C++不知为什么一直没有,只好自己设计一个了。
由于有数十万个连接,因此ConcurrentMap内部必须分多个map来保存数据,比如说每个子map负责两万个连接,当连接数超过两万个时,ConcurrentMap内部必须创建另外一个子map和互斥锁来处理,因为假如所有连接都用一个map和互斥锁来处理的话,显然效率太低了。这个时候你还需要一个hash算法来映射一下,决定放到哪个子map里,直接%10比较简单。
子map和互斥锁可以用两个vector来存储。
考虑到对map的查询和改写操作,可以加一个读写锁。
嗯,每个子map都对应一个读锁和写锁。
看情况吧,假如性能过得去的话就不用ConcurrentMap了,上述想法实现起来实在恶心了点。
- c++ 中 设计一个线程安全的map
- 一个线程安全的std::map封装
- 如何实现一个线程安全的map?
- 设计一个线程安全的类
- 实现一个简单的线程安全c++ map
- Map的线程安全实现
- Map集合类中保证线程安全的策略比较
- 设计一个线程安全的单例(Singleton)模式
- 设计模式 - 线程安全的单例模式(C#)
- 线程安全的的map-CSuperMap
- Java集合中那些类是线程安全的 以及 Map线程安全几种实现方法
- Java集合中那些类是线程安全的 以及 Map线程安全几种实现方法
- 设计安全的多线程应用程序(线程安全)
- 设计线程安全的类
- 线程安全类的设计
- 线程安全类的设计
- 线程安全类的设计
- 线程安全类的设计
- $_SERVER详细参数
- C++ primer:命名空间与多重继承
- 利用信号监视进程存在
- Android软件开发之制作第三方数据库与读取文件中数据库详解
- 管理电子邮件的五个简单但有效的小窍门
- c++ 中 设计一个线程安全的map
- Asterisk对新手来说
- BAT执行文件 按任意键开始退出
- 字符串分隔
- JSTL
- 不可忽略的Keep Alive
- HTML定时执行javascript
- 1 网站压力测试工具 WEB性能测试 Web Bench
- juery 访问子元素