struct kref 说明

1 数据结构
struct kref {


atomic_t refcount;


};
refcount:原子引用计数


2 函数说明
void  kref_set(struct kref *kref, int num);
函数功能:设置引用计数的值
参数说明:kref 引用计数的指针
          num  计数值
返回值:无


void  kref_init(struct kref *kref);
函数功能:初始化引用计数,设置值为1
参数说明:kref 引用计数的指针
返回值:无


void kref_get(struct kref *kref)
函数功能:引用计数值加1
参数说明:kref 引用计数的指针
返回值:无


int kref_put(struct kref *kref, void (*release)(struct kref *kref))
函数功能:引用计数值减1
参数说明:kref 引用计数的指针
                  release 回调函数指针,当计数值为0 时调用这个回调函数
返回值:无


示例代码
struct testdata
{
        struct kref Myref;
        int a,b,c;
}
struct testdata * Mydata;
void callback(struct kref *kref)
{
        struct testdata *ptr =container_of(kref, struct testdata, Myref); ;
        printk("release called\n");
        kfree(ptr);
}




void test(void )
{
        Mydata = kmalloc(sizeof(struct testdata), GFP_KERNEL);
        kref_init(&(Mydata->Myref));//引用计数为1
        kref_get(&(Mydata->Myref));//引用计数为2
        //处理数据
        
        //处理完成
        kref_put(&(Mydata->Myref), callback);//引用计数为1
        
        //退出
        kref_put(&(Mydata->Myref), callback);//引用计数为0,回调函数被调用,释放内存
}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值