系统程序员-成长计划
文章平均质量分 80
chuanwang66
软件工程专业
展开
-
(第四章 3)锁与嵌套锁的实现
一、锁 在书中,我们实现一个锁的背景是:对已经写好的单线程的双向链表做一个改进,使得它可以支持单线程和多线程两种方式。并且满足以下要求: 要求1. 对于多线程版本,由实现者(链表)加锁/解锁,以防调用者忘记解锁造成死锁。 解决思路:这个好办,只要在实现链表的时候在相应的操作函数中加锁即可。 要求2. 区分单线程和多线程版本时,即不需...原创 2013-03-06 20:38:13 · 731 阅读 · 0 评论 -
(第五章 1)组合——从DList到HashTable
在HashTable中,用到了DList来解决冲突,我们不用重新实现其内部的DList,只需将已经实现的双向链表DList组合到HashTable中使用即可。下面给出工程的全部代码: 就不再解释其中每个文件干嘛的了,我懂的。 依次来看看: 1. Makefile-D name: Predefine name as a macro. (man gcc可以看到) 2...原创 2013-03-07 15:13:11 · 410 阅读 · 0 评论 -
(第一章 1)通用双向链表——回调函数
1. Segmentation fault (core dumped): (1)正确: DListNode *a=(DListNode *)malloc(sizeof(DListNode)); a->data=(void *)2; (2)错误: DListNode *a; a->data=(void *)2; 会报错Segmentation fault (c...原创 2012-03-14 18:59:06 · 218 阅读 · 0 评论 -
(第一章 2)通用双向链表——带上下文的回调函数
编译时用的命令: gcc -g DList.c -o DList或 gcc DList.c -o DList 因为是c语言程序,不是c++,所以不用g++命令(否则报错) #include <stdio.h> #include <stdlib.h> //通用双向链表 typedef int...原创 2012-03-19 09:53:06 · 189 阅读 · 0 评论 -
(第七章 1)C工程管理: 做一个库和使用库 !未完待续!
本节介绍如何制作自己的函数库、安装这个函数库,以及在一个应用工程中如何使用这个函数库。其中用到了工具pkg-config. 一、 pkg-config 1. 为何要用pkg-config 你在 Unix 或 Linux 下开发过软件吗?写完一个程序,编译运行完全正常,在你本机上工作得好好的,你放到源代码管理系统中。然后,告诉你的同事说,你可以取下来...原创 2013-03-08 11:04:07 · 137 阅读 · 0 评论 -
(第三章 1)通用数组(void**)的归并排序
我简化了书上的实现,每个数组元素是void*类型,两个void*元素的大小比较通过调用者提供的回调函数typedef int (*compare_fun)(void* a, void* b);实现 泣血的总结: 1. 减号“-”的优先级 > 按位右移“>>”的优先级 int len=3; printf("%...原创 2012-03-22 16:40:51 · 132 阅读 · 0 评论 -
(第四章 1)Linux多线程
相关函数定义在/usr/include/下,如/usr/include/pthread.h中。 参考文档: Linux多线程编程 http://www.cnblogs.com/feisky/archive/2009/11/12/1601824.html Linux下的多线程编程 http://fanqiang.chinaunix.net/a4/b8/20010811/0905001105...原创 2012-03-26 10:36:17 · 155 阅读 · 0 评论 -
(第四章 2)生产者-消费者模型
输出大致像这样: [hadoop@sam1 test]$ ./producer_consumer [P0] Producing 0 ... [P1] Producing 0 ... [P1] Producing 1 ... [P0] Producing 1 ... ------> [C1] Comsuming 0 ... ------> [C1] Comsumi...原创 2012-03-26 10:47:21 · 147 阅读 · 0 评论