上一页 1 ··· 4 5 6 7 8
摘要: 内核中的 likely() 与 unlikely()在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? 首先要明确: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value)也就是说 likely() 和 unlikely() 从阅读和理解代码的角度来看,是一样的!!!这两个宏在内核中定义如下:#define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expe 阅读全文
posted @ 2012-10-26 14:27 joyce3800 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 转载自:http://blog.chinaunix.net/uid-24227137-id-3042195.html1. 使用kthread_create创建线程: struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char *namefmt, ...);这个函数可以像printk一样传入某种格式的线程名线程创建后,不会马上运行,而是需要将kthread_create() 返回的task_struct指针传给wake_up_process(),然后通过此函数运行线程。2. 当然.. 阅读全文
posted @ 2012-10-26 14:20 joyce3800 阅读(2082) 评论(0) 推荐(0) 编辑
摘要: ERR_PTR()和PTR_ERR()都是很简单的类型转换,没有什么可说的。 IS_ERR()有一些妙处。 内核中的函数常常返回指针,问题是如果出错,也希望能够通过返回的指针体现出来。 所幸的是,内核返回的指针一般是指向页面的边界(4K边界),即 ptr & 0xfff == 0这样ptr的值不可能落在(0xfffff000,0xffffffff)之间, 而一般内核的出错代码也是一个小负数,在-1000到0之间,转变成unsigned long, 正好在(0xfffff000,0xffffffff)之间。因此可以用(unsigned long)ptr > (unsigned lo 阅读全文
posted @ 2012-10-26 14:10 joyce3800 阅读(529) 评论(0) 推荐(0) 编辑
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2012-10-26 14:02 joyce3800 阅读(6) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8