- 博客(17)
- 资源 (14)
- 收藏
- 关注
转载 fork两次如何避免僵尸进程收藏
[cpp] view plaincopy#include #include #include #include int main(void) { pid_t pid; if ((pid = fork()) { fprintf(
2015-04-23 22:16:53 740
转载 为何要fork()两次来避免产生僵尸进程?
当我们只fork()一次后,存在父进程和子进程。这时有两种方法来避免产生僵尸进程:父进程调用waitpid()等函数来接收子进程退出状态。父进程先结束,子进程则自动托管到Init进程(pid = 1)。 目前先考虑子进程先于父进程结束的情况: 若父进程未处理子进程退出状态,在父进程退出前,子进程一直处于僵尸进程状态。若父进程调用waitpid()(这里使用
2015-04-23 22:06:47 422
转载 Linux中的 僵尸进程 和 孤儿进程
在UNIX里,除了进程0(即PID=0的交换进程,Swapper Process)以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程。操作系统内核以进程标识符(Process Identifier,即PID)来识别进程。进程0是
2015-04-23 20:57:13 522
转载 Linux进程的用户id,有效用户id与文件对应的所有者id,组id
进程对应的id:1. 实际用户id(uid),即登陆机器或运行进程的id。标识我们是谁。2. 有效用户id(euid),该进程能访问哪些文件,检查有效用户id与文件的访问权限(所有者ID,组ID:所有者访问权限,组访问权限,其它访问权限),以判别进程是否能够访问该文件3. 保存的设置用户id,由exec函数保存当执行一个程序文件时,进程的有效用户ID通常就是实际用户ID,有效组
2015-04-29 20:56:29 1475
转载 头文件string与string.h的区别
在C++中,#include与#include的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态的编译器)。喔,原来iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c,例如cmath就是由math.h变来的。using na
2015-04-24 10:36:04 452
原创 几种常见的数据结构的操作性能对比
数组、有序数组、链表、有序链表、二叉树(一般情况)、二叉树(最坏情况)、平衡树(一般情况和最坏情况)、哈希表等查找、插入、删除、遍历等过程的时间复杂度总结如下表:
2015-04-07 20:22:53 721
转载 【查找结构3】平衡二叉查找树 [AVL]
在上一个专题中,我们在谈论二叉查找树的效率的时候。不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找)。如何解决这个问题呢?关键在于如何最大限度的减小树的深度。正是基于这个想法,平衡二叉树出现了。 平衡二叉树的定义 (AVL—— 发明者为Adel'son-Vel'skii 和 Landis) 平衡二叉查找树,又称 AVL树。 它除了具备
2015-04-07 20:14:32 367
转载 【腾讯】10G整数文件中寻找中位数
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。 分析: 既然要找中位数,很简单就是排序的想法。那么基于字节的桶排序是一个可行的方法 (请见《桶排序》):思想:将整形的每1byte作为一个关键字,也就是说一个整形可以
2015-04-07 20:03:07 499
转载 【腾讯】1亿个数据取前1万大的整数
数据规模分析 不考虑操作系统的区别,通常将C++中的一个整型变量认为4bytes。那么1亿整型需要400M左右的内存空间。当然,就现代PC机而言,连续开辟400M的内存空间还是可行的。因此,下面的讨论只考虑在内存中的情况。为了讨论方便,假设M=1亿,N=1万。 用大拇指想想略微考虑一下,使用选择排序。循环1万次,每次选择最大的元素。源代码如下:
2015-04-07 19:51:29 570
转载 sizeof运算符和strlen函数的区别
1、sizeof是运算符,而strlen是函数。2、sizeof操作符的运算结果为size_t,他在头文件中的typedef为unsigned int。该类型保证能容纳所操作对象的最大字节大小。3、sizeof可以用类型做参数,而strlen只能用char*做参数,且必须是以‘\0’结尾。4、数组做sizeof参数不退化,而做strlen就退化成指针。5、大部分编译
2015-04-06 17:38:06 689
转载 C++/C语言的标准库函数malloc/free与运算符new/delete的区别
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。下面来看他们的区别。一、操作对象有所不同malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函
2015-04-06 17:37:22 1062
转载 数组指针和指针数组的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;
2015-04-05 23:16:26 303
转载 ++i和i++效率谁高
在内建数据类型的情况下,效率没有区别;在自定义数据类型的情况下,++i效率更高! 分析:(自定义数据类型的情况下)++i返回对象的引用;i++总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数。(重载这两个运算符如下)class Integer{public: Integer(long data):m_data
2015-04-01 21:03:37 474
转载 数据结构的选择-“数组、链表、树、哈希表”选哪个(性能比较)?
通用数据结构貌似包括:数组、链表、树(二叉树、平衡树)、哈希表。之所以称之为通用数据结构是因为它们通过关键字的值来存储、查找数据。现实中,要想存储人事记录、货存记录、合同表或销售业绩表等数据,则只需要一般用途的数据结构,即通用数据结构即可。至于具体使用哪一种数据结构,可以参考(哥,只是参考)下图:请不要从上图中得出“平衡树”是最好的结论。咱还是要坚持“具体问题,具体分析”的
2015-04-01 10:22:31 1201
转载 线程同步之利器(2)——区域锁(Scoped locking)
什么是区域锁确切的说,区域锁(Scoped locking)不是一种锁的类型,而是一种锁的使用模式(pattern)。这个名词是Douglas C. Schmidt于1998年在其论文Scoped Locking提出,并在ACE框架里面使用。但作为一种设计思想,这种锁模式应该在更早之前就被业界广泛使用了。区域锁实际上是RAII模式在锁上面的具体应用。RAII(Resource
2015-04-01 10:15:11 499
转载 线程同步之利器(1)——可递归锁与非递归锁
概述最常见的进程/线程的同步方法有互斥锁(或称互斥量Mutex),读写锁(rdlock),条件变量(cond),信号量(Semophore)等。在Windows系统中,临界区(Critical Section)和事件对象(Event)也是常用的同步方法。 简单的说,互斥锁保护了一个临界区,在这个临界区中,一次最多只能进入一个线程。如果有多个进程在同一个临界区内活动,就有可能产生竞态
2015-04-01 10:13:54 519
求一元高次多项式的加、减、乘运算数据结构课程设计
2021-10-12
winio资料合集.zip
2020-01-13
Qt5开发及实例(第3版)(包含书籍+程序源码+PPT)
2019-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人