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

深入理解RCU实现

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

5) 经过千山万水终于来到rcu_do_batch(如果rdp->donelist有的话)在此函数里,执行RCU写者挂载的回调,即wakeme_after_rcu。

rcu_do_batch

static void rcu_do_batch(struct rcu_data *rdp) 

    struct rcu_head *next, *list; 
    int count = 0; 

    list = rdp->donelist; 
    while (list) { 
        next = list->next; 
        prefetch(next); 
        list->func(list); 
        list = next; 
        if (++count >= rdp->blimit) 
            break; 
    } 
    rdp->donelist = list; 

    local_irq_disable(); 
    rdp->qlen -= count; 
    local_irq_enable(); 
    if (rdp->blimit == INT_MAX && rdp->qlen)

        blimit = blimit; 
    if (!rdp->donelist) 
        rdp->donetail = &rdp->donelist; 
    else 
        raise_rcu_softirq(); 

    它遍历处理挂在链表上的回调函数.在这里,注意每次调用的回调函数有最大值限制.这样做主要是防止一次调用过多的回调函数而产生不必要系统负载.如果donelist中还有没处理完的数据,打开RCU软中断,在下次软中断到来的时候接着处理. 

注意:

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

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