首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

RCURead-Copy Update)通过延迟写操作来提高同步性能,具体请参见第3章。这里只分析具有RCU的链表。

RCU常用来保护读操作占多数的链表与数组。具有RCU的链表的操作函数与普通链表操作函数的区别是在函数名后加上了_rcu,如list_for_each_rcu函数。

函数list_for_each_rcu的功能是遍历一个rcu保护的链表。其中,参数pos表示用来做链表位置计数的&struct list_head结构,参数head表示链表头。只要遍历被rcu_read_lock()保护,使用诸如list_add_rcu()的函数对链表同时访问是安全的。

函数List_for_each_rcu列出如下:

 

#define list_for_each_rcu(pos, head) \

     for (pos = (head)->next, prefetch(pos->next); pos != (head); \

           pos = rcu_dereference(pos->next), prefetch(pos->next))

 

函数rcu_dereferenceRCU读临界部分中取出一个RCU保护的指针。在需要内存屏障的体系中进行内存屏障(目前只有Alpha体系需要),函数列出如下:

 

#define rcu_dereference(p)     ({ \

                   typeof(p) _________p1 = p; \

                   smp_read_barrier_depends(); \

                   (_________p1); \

                   })

 

include/asm-i386/system.h中:

 

#define smp_read_barrier_depends()   read_barrier_depends()

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论