加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_安阳站长网 (https://www.0372zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

深入理解RCU实现

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

4)下次再进入rcu软中断__rcu_process_callbacks,发现rdp->batch已经比rcp->completed小了(因为上一步骤中,后者增大了),则将rdp->curlist上的回调移动到rdp->donelist里,接着还会再次进入rcu_check_quiescent_state,但是由于当前CPU的rdp->qs_pending已经为1了,所以不再往下清除cpu掩码。__rcu_process_callbacks

代码变成了:

void __rcu_process_callbacks(struct rcu_ctrlblk *rcp,  

                    struct rcu_data *rdp)  

{  

    if (rdp->curlist && !rcu_batch_before(rcp->completed, rdp->batch)) {  

        *rdp->donetail = rdp->curlist;  

        rdp->donetail = rdp->curtail;  

        rdp->curlist = NULL;  

        rdp->curtail = &rdp->curlist;  

    }  

  

    if (rdp->nxtlist && !rdp->curlist) {  

        move_local_cpu_nxtlist_to_curlist();  

  

        rdp->batch = rcp->cur + 1;  

  

        if (!rcp->next_pending) {  

            rcp->next_pending = 1;  

            rcp->cur++;  

            cpus_andnot(rcp->cpumask, cpu_online_map, nohz_cpu_mask);  

        }  

    }  

    if (rdp->donelist)  

        rcu_do_batch(rdp);  

}  

(编辑:网站开发网_安阳站长网)

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