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

深入理解RCU实现

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

                        if (audit_filter_rules(tsk, &e->rule, NULL, &state)) {

                                read_unlock(&auditsc_lock);

                                return state;

                        }

                }

                read_unlock(&auditsc_lock);

                return AUDIT_BUILD_CONTEXT;

        }

    使用RCU后将变成:

       static enum audit_state audit_filter_task(struct task_struct *tsk)

        {

                struct audit_entry *e;

                enum audit_state   state;

                rcu_read_lock();

                /* Note: audit_netlink_sem held by caller. */

                list_for_each_entry_rcu(e, &audit_tsklist, list) {

                        if (audit_filter_rules(tsk, &e->rule, NULL, &state)) {

                                rcu_read_unlock();

                                return state;

                        }

                }

                rcu_read_unlock();

                return AUDIT_BUILD_CONTEXT;

        }

    这种转换非常直接,使用rcu_read_lock和rcu_read_unlock分别替换read_lock和read_unlock,链表遍历函数使用_rcu版本替换就可以了。

    使用rwlock的写端代码:

       static inline int audit_del_rule(struct audit_rule *rule,

                                         struct list_head *list)

        {

                struct audit_entry  *e;

                write_lock(&auditsc_lock);

                list_for_each_entry(e, list, list) {

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

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

推荐文章
    热点阅读