C++ 模板实现败者树,进行多路归并

摘要: 项目需要实现一个败者树,今天研究了一下,附上实现代码。几点说明:1. 败者树思想及实现参考这里:http://www.cnblogs.com/benjamin-t/p/3325401.html2. 多路归并中的“多路”的容器使用的是C语言数组 + 数组长度的实现(即const ContainerTy... 阅读全文
posted @ 2014-10-17 21:56 夜花烛 阅读(1369) 评论(0) 推荐(0) 编辑

CentOS 7 使用 Realtek 8188eu 上网 (解决 Required key not available)

摘要: 1. 从这里下载驱动:https://github.com/lwfinger/rtl8188eu2. make && make install 都没有问题,但是 sudo modprobe 8188eu 时总是提示:ERROR: could not insert module 8188eu.ko: ... 阅读全文
posted @ 2014-08-01 22:08 夜花烛 阅读(4444) 评论(1) 推荐(0) 编辑

C++ Concurrency in Action 读书笔记

摘要: 一、锁的根本目标:维持不变式 类一般都维持一些不变式,就是关于一个数据结构的总是为真的陈述(好像一般都是指内部变量的意义)。比如链表的两个不变式是,一个节点的next指针总是指向下一个节点,链表的number成员变量总是指明了节点总数。这些不变式总会在链表变动时被破坏,比如向链表插入一个节点时,总会有一个时刻,某个节点的next指针指向的不是它真正的下一个节点,number成员也会有一个时刻表达的不是节点真正的总数。如果在这些时刻有其它线程来操作这些不变式被破坏的地方,那就会引发竞争条件(最终的结果依赖于两个线程的执行次序)。所以锁的存在就是为了对外部保持不变式,不让外部接触到不变式暂时被破. 阅读全文
posted @ 2014-04-08 11:15 夜花烛 阅读(995) 评论(0) 推荐(0) 编辑

Linux操作系统是如何工作的

摘要: 一、操作系统工作的基础 操作系统虽然极其庞大和复杂,但是它的核心思想却非常简单明了,其实它的运作只依赖于三个基本的概念:存储程序计算机、堆栈(函数调用堆栈)机制和中断机制。1. 存储程序计算机 存储程序计算机就是冯·诺伊曼结构,它的核心思想就是把指令当做数据存储起来,这样的话,就不是用硬件来实现程序(以前实现不同的程序要把不同的硬件拼来拼去),从而从根本上改善了计算机的灵活性,使得计算机可以很容易地改变其程序,并在程序控制下改变其运算内容。有了这种体系结构,就可以把程序的指令存到存储器中,然后运算单元就可以从存储器中取指令,然后执行。这就达到了基本的运算的目的,并可以在一台机器上方便 阅读全文
posted @ 2013-06-29 16:46 夜花烛 阅读(480) 评论(1) 推荐(0) 编辑

fork和exec系统调用在内核中的执行过程

摘要: 一、编程实现一个简单的shell程序大体上,先fork()一个子进程, 然后在子进程里执行新程序,父进程则等待子进程执行结束。子进程的fork()返回0,父进程的fork()返回子进程的进程ID,以此可以区分两个进程。在子进程中通过调用execl来执行新程序,execl函数的签名为:int execl(const char * path, const char * arg, ...);为了调用"/bin/"中的程序,先定义一个路径字符串"/bin/",然后把新程序的名字拼接在后面,作为execl的第一个参数传入。后面是新程序的名称和它的一个参数,这里只支 阅读全文
posted @ 2013-05-30 22:52 夜花烛 阅读(1456) 评论(0) 推荐(0) 编辑

基于GCC和GDB的简单C程序的汇编分析和运行时堆栈分析

摘要: 学号:212一、从源代码文件到可执行文件 从C文件到可执行文件,一般来说需要两步,先将每个C文件编译成.o文件,再把多个.o文件和链接库一起链接成可执行文件。但具体来说,其实是分为四步,下面以example.c为例进行说明。#define MYINT intshort addend1 = 1;static int addend2 = 2;const static long addend3 = 3;static MYINT g(MYINT x){ return x + addend1;}static const MYINT f(MYINT x){ return g(x + ad... 阅读全文
posted @ 2013-05-17 17:55 夜花烛 阅读(697) 评论(0) 推荐(0) 编辑