加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 交互 > 正文

深入理解RCU实现

发布时间:2016-10-29 16:06:37 所属栏目:交互 来源:站长网
导读:副标题#e# 深入理解RCU实现 ——基于 内核2.6.21 RCU实现(lvyilong316) RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构, 读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然

                                         struct list_head *list)

        {

                struct audit_entry  *e;

                /* Do not use the _rcu iterator here, since this is the only

                 * deletion routine. */

                list_for_each_entry(e, list, list) {

                        if (!audit_compare_rule(rule, &e->rule)) {

                                spin_lock(&e->lock);

                                list_del_rcu(&e->list);

                                e->deleted = 1;

                                spin_unlock(&e->lock);

                                call_rcu(&e->rcu, audit_free_rule, e);

                                return 0;

                        }

                }

                return -EFAULT;         /* No matching rule */

        }

    删除条目时,需要标记该条目为已删除。这样读者就可以通过该标志立即得知条目是否已经删除。

小结

    RCU是2.6内核引入的新的锁机制,在绝大部分为读而只有极少部分为写的情况下,它是非常高效的,因此在路由表维护、系统调用审计、SELinux的AVC、dcache和IPC等代码部分中,使用它来取代rwlock来获得更高的性能。但是,它也有缺点,延后的删除或释放将占用一些内存,尤其是对嵌入式系统,这可能是非常昂贵的内存开销。此外,写者的开销比较大,尤其是对于那些无法容忍旧数据的情况以及不只一个写者的情况,写者需要spinlock或其他的锁机制来与其他写者同步

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读