Linux内核驱动模型与文件系统访问的技术解析
1. Linux内核驱动模型中的对象引用计数
在多线程的C语言程序里,判定何时释放结构体所占用的内存是个难题。Linux内核作为大规模的多线程程序,需要同时处理恶意用户和大量处理器的运行,因此对多线程可访问的结构体进行引用计数是必要的。
struct device 结构体就是一个使用引用计数的例子,它有一个字段 atomic_t refcount 用于判断何时可以安全释放该结构体。当结构体初始化时, refcount 被设为1。代码若要使用该结构体,需调用 get_device 函数增加引用计数:
static inline void get_device(struct device * dev)
{
BUG_ON(!atomic_read(&dev->refcount));
atomic_inc(&dev->refcount);
}
当线程使用完结构体后,调用 put_device 函数减少引用计数:
void put_device(struct device * dev)
{
if (!atomic_dec_and_lock(&dev->refcount,&device_lock))
return;
...
/* Te
订阅专栏 解锁全文
1350



被折叠的 条评论
为什么被折叠?



