自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 死锁的产生及检测

产生死锁的四个必要条件(1) 互斥条件:一个资源每次只能被一个进程(线程)使用。(2) 请求与保持条件:一个进程(线程)因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件 : 此进程(线程)已获得的资源,在末使用完之前,不能强行剥夺。(4) 循环等待条件 : 多个进程(线程)之间形成一种头尾相接的循环等待资源关系。

2017-03-31 20:52:04 1779

原创 生产者—消费者模型

生产者和消费者满足的原则(3,2,1):(1)三种关系:生产者和生产者关系:互斥关系(竞争) 生产者和消费者关系:互斥关系,同步关系 消费者和消费者关系:互斥关系(竞争)(2)两种角色:生产者和消费者(进程或者线程扮演)(3)一个交易原则

2017-03-31 14:19:56 330

原创 线程同步与互斥(二)--条件变量

如果现在在等待一个信号。如果该信号被设置,则继续运行。如果没有条件变量,我们将会不停的去查询该信号是否被设置,这样就会浪费大量的cpu。而通过使用条件变量,我们就可以将等待信号的线程阻塞,直到有信号的时候再去唤醒它。 条件变量的类型是pthread_cond_t。

2017-03-30 22:17:28 242

原创 程序的汇编,链接过程:

注意:(1) IA指令长度从1到15个字节不等。常用的指令以及操作数较少的指令所需字节数少,那些不常用的或者操作数较多的指令所需字节数较多。(2) 设计指令格式的方式是,从某个给定位置开始,可以将字节唯一的解码成机器指令。(3) 反汇编是基于机器代码中的文件中的字节序列来确定汇编代码。它不需访问程序的源代码或者汇编代码。(4) 反汇编使用的指令命名规则与gcc生成的汇编代码使用的有细微差别。

2017-03-30 20:09:43 2195

原创 剑指offer——字符串替换空格

(1)先遍历一次字符串,统计出字符串中空格的总数,并可以由此计算出替换之后字符串总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。(2)然后从后往前开始复制替换。首先准备两个指针,p1和p2,p1指向原始字符串的末尾,p2指向那个替换后字符串的末尾,接下来向前移动指针p1,逐个复制它指向的字符到p2所指的位置,遇到空格的话,p1向前移动一个,p2插入“%20”,p2向前移动

2017-03-29 22:31:12 323

原创 C++异常处理

异常的抛出和捕获(1)异常是通过抛出对象而引发的,该对象的类型决定了应该激活哪个处理代码。( 2). 被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那一个。

2017-03-29 13:46:30 361

原创 C--异常处理

程序消亡的一般形式:(1)无疾而终(即就是正常退出,例如return 0、点击图标按钮直接退出)(2)自杀(例如:abort()、exit(0))> abort()函数:引发不正常进程的终止,异常终止一个进程,终止当前进程,返回错误码,错误码缺省值是3> 函数原型 : void abort(void); > 函数说明:abort函数是一个比较严重的函数,当调用它时,会导致程序异常终止

2017-03-28 19:55:37 609

原创 进制间转换的小窍门

当值x是2的非负整数n次幂时,即就是2^n, 我们很容易将x写成十六进制的形式,只要记住是x的二进制表示就是1后面跟n个0. 十六进制数字0代表4个二进制0. 因此,当n表示成i+4j的形式,其中0<=i<= 3时,我们可以把x写成开头的十六进制数字为1(i=0),2(i=1),4(i=2)或者8(i=3),后面跟着j个十六进制的0。

2017-03-27 21:37:18 1679

原创 C++类型萃取

#include <iostream>using namespace std;struct _TrueType{ static Get() //使用static修饰成员函数的话,访问该成员函数的话可以用通过类作用域访问,//不使用static修饰成员函数的话,访问该成员函数,要先进行对象的创建,然后用成员操作符访问 { return true; }};

2017-03-27 21:35:02 311

原创 线程同步与互斥(一)

mutex (互斥量) (互斥锁) 多个线程同时访问共享数据时可能会冲突,这跟前面讲信号时所说的可重入性是同样的问 题。 比如两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成: (1). 从内存读变量值到寄存器 (2). 寄存器的值加1 (3)将寄存器的值写回内存 假设四个线程在多处理器平台上同时执行这三条指令,则可能导致下图所

2017-03-25 09:45:43 342

原创 linux之线程属性(分离线程)

在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源 (例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。

2017-03-24 22:56:20 3278

原创 linux之线程

线程共享以下进程资源和环境: 1. 文件描述符表 2. 每种信号的处理方式(SIG_IGN、SIG_DFL或者自定义的信号处理函数) 3. 当前工作目录 4. 用户id和组id 但有些资源是每个线程各有一份的: 1. 线程id 2. 上下文,包括各种寄存器的值、程序计数器和栈指针3. 栈空间 4. errno变量 5. 信号屏蔽字 6. 调度优先级

2017-03-24 21:25:50 241

转载 STL Containers

本文转载:http://blog.csdn.net/byxdaz/article/details/4633826 STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。这里的“容器”和算法的集合指

2017-03-24 15:36:19 1035

原创 使用List模拟实现STL中的Queue

(1)T& back()返回队列最后一个元素(2)const T& back()const返回队列最后一个元素(3)bool empty()const如果队列为空,返回true,否则返回为false(4)T& front()返回队列第一个元素const T& front()const返回队列第一个元素(5)void pop()移去队列中的第一个元素

2017-03-24 15:05:59 842

原创 使用Vector模拟实现STL中的stack

**成员函数**:(1)stack::stackstack ( const Container& ctnr = Container() );用于构造一个栈适配器对象(2)stack::emptybool empty ( ) const;判断是否为空(3)stack::popvoid pop ( );在栈的顶部移除元素(4)stack::push

2017-03-24 14:44:53 2050

原创 类模板模拟实现STL中List

构造函数:  list<int> c1(3); //建一个含三个默认值是0的元素的链表  list<int> c2(5,2); //建一个含五个元素的链表,值都是2  list<int> c4(c2); //建一个c2的拷贝构造链表成员函数:(1)begin() 返回指向链表第一个元素的迭代器。(2)end() 返回指向链表最后一个元素之后的迭代器。

2017-03-24 14:18:04 536

原创 类模板模拟实现STL中Vector

具体的用法:(1).PushBack 在数组的最后添加一个数据(2).PopBack 去掉数组的最后一个数据 (3). [] 得到编号位置的数据(4).Begin 得到数组头的指针(5).End 得到数组的最后一个单元+1的指针(6).Front 得到数组头的引用

2017-03-20 22:45:18 488

原创 剑指offer——二维数组中的查找

在一个二维数组中,每一行都按照从左到右的顺序递增排序,每一列都按照从上到下的顺序递增排序,在这个数组中查找一个数字,如果找到了,返回true,如果未找到,返回false。 例如: 数组如下: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15在解决这个问题时,首先想到最简单,最直接的方法,就是从上到下依次搜索,直到找到要查找的数字,或者查找完所有

2017-03-19 11:10:06 855

原创 linux进程间通信———内存共享

共享内存(shared memory):是linux下的多进程之间的通信方法,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。共享内存指在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。共享内存是存在于内核级别的一种资源,在shell中可以使用ipcs命令来查看当前系统IPC中的状态

2017-03-16 19:08:23 8481

原创 字符串个数

给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续 出现的个数+字符”。 比如字符串AAAABCCDAA会被编码成4A1B2C1D2A#include<iostream>#include<string>using namespace std;int main(){ char str[10001] = {0}; cin>>str; int count = 1

2017-03-15 22:04:48 537

原创 C++之模板函数

模板函数特化形式如下:(1)、关键字template后面接一对空的尖括号<>(2)、再接模板名和一对尖括号,尖括号中指定这个特化定义的模板形参(3)、函数形参表(4)、函数体template<>返回值 函数名<Type>(参数列表){// 函数体}

2017-03-15 19:35:41 347

原创 不能声明为虚函数的函数:

使用虚函数时,有两点要注意: (1)只能用virtual声明类的成员函数,使它成为虚函数,而不能将类外的普通函数声明为虚函数。因为虚函数的作用是允许在派生类中对基类的虚函数重新定义。显然,它只能用于类的继承层次结构中。 (2)一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同的参数(包括个数和类型)和函数返回值类型的同名函数。

2017-03-13 20:08:22 2477

原创 虚函数的调用

虚函数怎么调用: (1)先找到虚函数表 (2)从虚表中找到要调用的虚函数。单继承中派生类虚表的形成: 先看下述的代码:#include <iostream>using namespace std;//基类中包含虚函数和普通函数class Base{public: virtual void FunTest1() { cout<<"Base::FunTest

2017-03-12 17:44:58 5280 2

原创 C++纯虚函数

在成员函数的形参后面写上=0,则成员函数为纯虚函数。纯虚函数声明: virtual 函数类型 函数名 (参数表列) = 0;class Person{ virtual void Display () = 0; // 纯虚函数protected : string _name ; // 姓名};class Student : public Person{};

2017-03-11 10:00:02 46896 2

原创 linux的进程间通信——信号量

信号量的本质是一种数据操作锁,它本⾝身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。当请求一个使⽤用信号量来表⽰示的资源时,进程需要先读取信号量的值来判断资源是否可 用。大于0,资源可以请求,等于0,无资源可用,进程会进入睡眠状态直⾄至资源可用。

2017-03-10 21:24:26 1407

原创 C++虚函数

1.虚函数的作用: 允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。基类于派生类中有同名函数:#include <iostream>using namespace std;#include <string>//声明基类Studentclass Student{public: Student(int num, str

2017-03-09 15:19:29 218

原创 C++继承

C++继承分为公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。 基类和派生类的关系: 派生类是基类的具体化,而基类是派生类的抽象化。

2017-03-06 22:34:19 304

原创 linux之消息队列

1.创建新消息队列或取得已存在消息队列 原型:int msgget(key_t key, int msgflg); 参数:key:可以认为是一个端口号,也可以由函数ftok生成。 msgflg: IPC_CREAT 如果IPC不存在,则创建一个IPC资源,否则打开操作。 IPC_EXCL:只有在共享内存不存在的时候,新的共享内存

2017-03-03 16:23:29 408

原创 linux之进程等待

pid_t waitpid(pid_t pid, int *status, int options); 返回值:(1). 当正常返回的时候waitpid返回收集到的⼦子进程的进程ID; (2). 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集, 则返回0; (3). 如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;

2017-03-03 14:09:29 705

原创 C++实现双向链表

#include using namespace std;#include #include typedef int DataType;struct Node{ Node(const DataType& data) //创建一个数值为data的节点 : _pNext(NULL) , _pPre(NULL) , _data(data) {} Node* _p

2017-03-02 13:41:06 351

原创 C++实现动态顺序表

#include using namespace std;#include #include typedef int DataType;class Vector{public: explicit Vector() :_pData(new DataType[3]) ,_capacity(3) ,_size(0) {} //n个值为data的数据 expli

2017-03-02 13:30:27 411

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除