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,回调函数被调用,释放内存
}
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,回调函数被调用,释放内存
}