struct kref 说明

来源:互联网 发布:阿里云售后电话 编辑:程序博客网 时间:2024/06/03 22:20
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 0
原创粉丝点击