治肾虚不含糖,专注内核性能优化二十年。 https://github.com/KnightKu
发布时间:2012-12-26 12:57:46
1.最长递增子串(codepad.org已验证) 2.最长不连续公共子串(codepad.org已验证) 3.字符串的编辑距离(codepad.org已验证) 4.上下两个等长数组,可互换同下标元素,求上下两数组和可能的最小差值(codepad.org已验证) 5.连续子数组的最大和(codepad.org已验证) 代码都为简单实现版,均为递归算法,用作练手和思路记录。 1.最长递增子串 点击(此处)折叠或打开 #define MAX 10000 #include <stdio.h> #include &l......【阅读全文】
发布时间:2012-12-25 15:09:57
根据内核3.1.6版本源码、书籍和网上资料,对几个函数进行分析
介绍这几个函数,不得不先介绍等待队列wait_queue_head_t
等待队列用于使得进程等待某一特定事件的发生,无需频繁的轮询,进程在等待周期中睡眠,当时间发生后由内核自动唤醒。
等待队列
(一)数据结构
等待队列结构如下,因为每个等待队列都可以再中断时被修改,因此,在操作等待队列之前必须获得一个自旋......【阅读全文】
发布时间:2012-12-22 17:05:37
编写可重入和线程安全的代码在单线程的进程中,有且仅有一个控制流。这种进程执行的代码不必是可重入的,或线程安全的。在多线程的程序中,同一个函数或是同一个资源可能被多个控制流并发地访问。为了保证资源的完整性,为多线程程序写的代码必须是可重入的和线程安全的。本节提供了一些编写可重入和线程安全的代码的信息。理解可重入和线程安全可重入和线程安全都是指函数处理资源的方式。可重入和线程安全是两个相互独立的概念,一个函数可以仅是可重入的,可以仅是线程安全的,可以两者都是,可以两者都不是。可重入一个可重入的函数不能为后续的调用保持静态(或全局)数据,也不能返回指向静态(或全局)数据的指针。函数中用到的所有的数据......【阅读全文】
发布时间:2012-12-21 14:36:11
参考这里:http://blogs.msdn.com/b/oldnewthing/archive/2004/06/29/168719.aspx这个例子非常好,线程安全但不是可重入的:int length = 0;char *s = NULL;// Note: Since strings end with a 0, if we want to// add a 0, we encode it as "\0", and encode a// backslash as "\\".// WARNING! This code is buggy - do not use!void AddToString(i......【阅读全文】
发布时间:2012-12-21 10:53:21
1.导致并发执行的原因 硬件中断服务 SMP(对称多处理) 内核抢占 schedule()2.scull的缺陷if (!dptr->data[s_pos]) { dptr->data[s_pos] = kmalloc(quantum, GFP_KERNEL); &nb......【阅读全文】