memcached源码探秘(一)—— hash_table
来源:互联网 发布:淘宝客案例省钱快报 编辑:程序博客网 时间:2024/06/05 17:53
memcached在删除hash_table中的单向表的某个节点的时候,非常巧妙的使用了一个二级指针实现了删除的操作。
void assoc_delete(const char *key, const size_t nkey, const uint32_t hv) { item **before = _hashitem_before(key, nkey, hv); if (*before) { item *nxt; hash_items--; /* The DTrace probe cannot be triggered as the last instruction * due to possible tail-optimization by the compiler */ MEMCACHED_ASSOC_DELETE(key, nkey, hash_items); nxt = (*before)->h_next; (*before)->h_next = 0; /* probably pointless, but whatever. */ *before = nxt; return; } /* Note: we never actually get here. the callers don't delete things they can't find. */ assert(*before != 0);}
要实现单向列表的删除,按照一般教科书上的方法要声明两个指针,pre、cur,用来保存当前的节点和其前置的节点。但是如果应用二级指针,保存指向当前节点指针的地址**before,则*before表示指向当前节点的指针,用这个方法可以非常优雅的解决问题。
0 0
- memcached源码探秘(一)—— hash_table
- OpenStack源码探秘(一)——Nova-Scheduler
- nginx-0.8.38源码探秘(一)
- Glance源码架构探秘(一)
- C++ STL源码学习(之hash_table篇)
- OpenStack源码探秘(二)——Oslo.config
- 深入哈希表(一)--哈希表的简介(Hash_Table)
- Hash_Table(散列表)
- hash_table
- CSV探秘(一)—— CSV的基本规则
- C#探秘系列(一)——ToDictionary,ToLookup
- AngularJS探秘(一)——$apply浅析
- 【源码剖析】tornado-memcached-sessions —— Tornado session 支持的实现(一)
- 【源码剖析】tornado-memcached-sessions —— Tornado session 支持的实现(一)
- Memcached源码分析之状态机(一)
- memcached源码分析一
- Runloop 探秘(一)
- epoll源码探秘(epoll_create)
- C# 线程管理 abort join
- FPGA机器学习之stanford机器学习第十八堂
- 云环境下的容灾
- 自己的APPS DBA部分的文档可以整理成一本书了
- 首次在matable中安装libsvm碰到的问题和解决方法----" mxGetIr 已过时" 错误
- memcached源码探秘(一)—— hash_table
- 浅析——ExpandableListView的使用
- 时间参考
- 虚拟机设备直通的两种方式(Working in Progress)
- Docker镜像文件(images)的存储结构
- C# .NET中的字段与属性_1
- 【C++基础 03】do...while(0)妙用
- java总结(面向对象)
- cocos2d-x多分辨率适配方案:setDesignResolutionSize使用