- 博客(12)
- 资源 (56)
- 问答 (3)
- 收藏
- 关注
原创 C++ 实现堆排序
堆定义:由n个元素组成的序列{k1,k2,...,kn-1,kn},当且仅当满足如下图关系时,称之为堆若将和此序列对应的一维数组看成一个完全二叉树,树中每个结点对应于原始数据的一个记录,并且每个结点应满足以下条件:非叶结点的数据大于或等于其左、右孩子结点的数据(若是按从大到小的顺序排序,则要求非叶结点的数据小于或等于其左、右孩子结点的数据)。 由堆的定义可看出,其根结点为最大值,
2015-08-18 21:49:28 923
原创 linux 线程同步(二)
信号量信号量是互斥锁的升级版把互斥锁中1变成了n,举个简单的例子:假设现在有10个人,有一部手机,这10个人都竞争来使用手机打电话这就是互斥锁。对于信号量,现在可能是有4部手机,这10个人都竞争来使用手机打电话。相比互斥锁信号量由1变成了4。信号量相也就是操作系统中pv操作,它广泛应用进程或者线程间的同步与互斥。
2015-08-18 21:05:42 1535
原创 Linux 线程同步(一)
线程为什么要同步1.共享资源,多个线程可以对共享资源操作2.由于并发原因,线程操作共享资源操作顺序不一样,可能会造成脏数据3.处理器对存储器的操作一般不是原子操作。临界区(Critical Section) 临界区为了保证在某一时刻只有一个线程能访问数据的简便方法,在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图同时访问同时访问临界区,那么在有一个线程进入
2015-08-15 22:03:00 1288
原创 多路转接模型之poll
poll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪者。poll和select效率差不多,只是其使用接口相对简单些,poll不在局限于1024个文件描述符,poll监听事件和触发事件分开,event表示监听事件,revents表示触发的事件。相比select不用每一次都需要重新设置监听事件。 #include int poll(struct
2015-08-13 11:04:34 884
原创 C++实现位数组
当我们遇到大量整数排序时候为了节省内存空间我们可以考虑使用bit数组来实现,缺点是其只适用于正整数。思想:在32位系统一个int类型占4个字节,按位来计算一个int类型可以记录32个数,因此,采用int型数组和移位来实现相关功能。C++实现bit数组#includeusing namespace std;const unsigned int bitValue[32]={ 0
2015-08-12 16:23:31 3944
原创 linux下pthread_cancel无法取消线程的原因
一个线程可以调用pthread_cancel终止同一进程中的另一个线程,但是值得强调的是:同一进程的线程间,pthread_cancel向另一线程发终止信号。系统并不会马上关闭被取消线程,只有在被取消线程下次系统调用时,才会真正结束线程。或调用pthread_testcancel,让内核去检测是否需要取消当前线程。被取消的线程,退出值,定义在Linux的pthread库中常数PTHREAD_CANCELED的值是-1。
2015-08-12 10:16:49 16868 1
原创 多路I/O转接之select模型
I/O复用使得程序能够同时监听多个文件描述符,这对提高程序的性能至关重要。通常,网络程序同时处理或者监听多个socket文件描述符的时候可以考虑使用I/O复用模型。值得强调的是,I/O复用虽然能够同时监听多个文件描述符,但它本身是阻塞的。当有多个文件描述符就绪的时候,如果不采取额外的措施,程序就只能按顺序依次处理其中的每一个文件描述符,这使得服务器程序看起来像串行工作的。如果要实现并发,只能够使用多进程或者多线程的手段。
2015-08-10 16:42:52 1190
原创 waitpid和SIGCHLD信号回收僵尸进程
对于多进程而言,父进程一般需要跟踪子进程的退出状态。因此当子进程结束运行时,内核不会立即释放该进程的进程表的表项。以满足父进程后续对子进程退出的信息查询(死后验尸),当然前提是父进程还在运行。在子进程结束之后,父进程读取其退出状态之前,我们称该子进程处于僵尸态(用户空间已经被释放,其不能被调度)。
2015-08-09 08:28:28 4093
原创 Linux 下信号理解(一)
Linux提供了信号传递进程消息的机制,什么是信号?它是一种非常短的消息,短到只有一个数字。值得强调的是信号和信号量只少了一个字,但他们完全是不同的概念,信号量仅用于同步代码段,而信号则用于传递消息。信号的编号:通过kill -l 命令可以看到
2015-08-04 21:52:24 1657
原创 linux下虚拟文件系统
Linux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用ls命令看起来是一样的,读写操作用起来也都是一样的,这是怎么做到的呢?Linux内核在各种不同的文件系统格式之上
2015-08-03 22:02:09 711
原创 实例讲解,set,multiset,map,multimap关联容器
测试环境:windows 7 vs2010内部元素有序排列,新元素插入的位置取决于它的值,查找速度快。除了各容器都有的函数外,还支持以下成员函数:find: 查找等于某个值的元素(x小于y和y小于x同时不成立即为相等)lower_bound: 查找某个下界upper_bound: 查找某个上界equal_range: 同时查找上界和下界count:计算等于某个值的元
2015-08-03 21:25:13 1849
Robocup机器人足球仿真比赛系统的研究
2012-04-23
SQL+Server+2005+Visual+C#+2005专业开发精解+源代码
2012-04-09
com.mysql.jdbc.Driver 问题
2017-06-02
go语言实现并行的快速排序算法?
2015-10-24
Azure新建网站后,怎么通过FTP软件发布网站?
2015-01-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人