条件变量---线程的同步与互斥

condition variable 条件变量 目的是多线程同步,以一定合理顺序访问临界资源。条件变量的接口 条件变量初始化和销毁函数 与mutex的初始化相同,有两种方式,函数初始化与全局变量宏的初始化条件变量的等待操作 wait是阻塞式等待的函数,可见一个条件变量总是与一个互斥...

2017-03-31 19:03:20

阅读数 169

评论数 0

互斥锁---线程的同步与互斥

前面我们验证了互斥锁能够保证线程的互斥操作,让各线程对全局变量的累加的次数保证了正确性线程—中互斥锁的接口函数 互斥锁的初始化以及销毁函数: 初始化互斥锁有两种方式,一种是函数初始化,参数arr表示的是mutex的属性,一般为NULL,设置为默认属性;另一种是直接定义一个全局变量,并用宏P...

2017-03-31 17:25:33

阅读数 156

评论数 0

死锁的产生及解决

死锁的概念:多个线程因竞争资源而导致进程处于一直挂起的状态;“死锁”产生的四种情景: 单线程重复申请锁。 如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起等待别的线程释放锁,然而锁被自己占用,该进程又挂起没有机会释放锁,因此就永远处于挂起等待状态,造成死锁。 ...

2017-03-30 21:07:09

阅读数 180

评论数 0

有序二维数组查找元素

题目:在一个二维数组中,每一行都按照从左到右的递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成这样一个函数,输入这样的一个二维数组和一个整数,判断数组是否含有该整数。 例如:下面的二维数组都是每行、每列都递增排序。如果在这个数组中查找数字1,则返回true;如果查找数字5,由于数组不含...

2017-03-28 22:24:31

阅读数 190

评论数 0

异常处理---C++

C++异常处理:当一个函数发现自己无法处理的错误时抛出异常,让函数的调用者直接或间接的处理这个问题1.异常的抛出与捕获 异常是通过抛出对象引发的,该对象的类型决定了应该激活哪个处理代码 被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那一个 void FunTest() { ...

2017-03-27 22:50:07

阅读数 152

评论数 0

异常处理---C语言

程序消亡的一般形式 无疾而终(正常退出,例如return 0、点击图标按钮退出) 自杀(例如:abort()、exit(0))abort会弹出终端后中断,exit直接一闪而过中断,断言assert可以用abort模拟实现 他杀(任务管理器中关闭该程序) C语言传统的错误处理方式 终止程序 #inc...

2017-03-27 22:13:23

阅读数 114

评论数 0

POD类型的萃取

POD:plain old data平凡类型—基本类型 自我理解POD类型萃取:就是对基本类型的提取,我们在实现一个通用的函数模板时有时对特殊的数据类型要采用特殊的函数体处理,而基本类型数据都可以通过实例化该函数得到想要的结果,所以我们可以将一般的类型提取出来 接下来,我们用程序实例来验证#i...

2017-03-26 22:09:59

阅读数 119

评论数 0

线程---中

多线程编程模块一:线程的基本概念 - 线程的概念 进程是在进程地址空间运行的执行流2.线程与进程的区别 线程是系统分配资源的实体,是系统分配资源的基本单位;线程是基本单位; 在linux下,没有真正意义上的线程,只有进程; 线程是在进程地址空间内运行的执行流; 线程id(用函数p...

2017-03-24 21:52:29

阅读数 135

评论数 0

C++ STL基本容器的使用

本文转载自:C++ STL基本容器的使用 C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持...

2017-03-23 19:51:10

阅读数 173

评论数 0

适配器queue---deque/List做空间配置器实现

用deque(双端链表)实现queue, 源代码:#pragma once#include<stdio.h> #include<deque> #include<iostream> using namespace std; //用双端队列做空间配置器来实现队列 ...

2017-03-23 19:44:54

阅读数 240

评论数 0

适配器Stack----deque/Vector做空间配置器实现

Stack是STL标准模板库中的一种迭代器,有着”先进后出”的特点。 接下来我们分别用deque(双端链表)和Vector(顺序表)来做为Stack的模板参数(底层模板接口)来实现迭代器Stack 用deque实现Stack,deque是由库自己实现,即我们直接利用deque内部已接实现的代码...

2017-03-23 19:30:10

阅读数 334

评论数 0

双向链表List---类模板实现

在前面我们用C++中的类来实现了双向链表,C++实现双向链表今天我们用模板类来实现各种可能出现的类型的带头双向链表(容器List)。该链表不仅是带头的双向链表,而且头节点与尾结点构成了循环链表代码如下:/* #pragma once#include<stdio.h> #include&...

2017-03-23 19:17:33

阅读数 230

评论数 0

顺序表---模板类实现

第三种书写方式 1. C语言实现 2. C++实现 3. 类模板实现 接下来我们用类模板来实现STL下的六大组件容器Vector代码如下:#pragma once#include<cstring> #include<iostream> #include<...

2017-03-23 19:00:39

阅读数 227

评论数 0

二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有这个整数。 二维数组举例: 1 2 8 9 2 4...

2017-03-16 22:24:09

阅读数 221

评论数 0

线程---上

一、什么叫做线程? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运...

2017-03-16 18:33:37

阅读数 91

评论数 0

共享内存

本文部分转载自:http://blog.csdn.net/ljianhui/article/details/10253345 进程间通信的一个主题:共享内存 一、什么是共享内存? 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的...

2017-03-15 22:25:41

阅读数 107

评论数 0

赋值运算符重载

在下面类中实现:class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); CMyString& operator=(const CMyS...

2017-03-14 19:11:32

阅读数 175

评论数 0

函数模板---上

如果让我们编写一个整型加法函数,我们可以很快的给出代码int Add(const int& left,const int& right) { return (left+right); }但是,我们同时还要求计算出Add(1.0,2.0),Add(“123”,“456”)时,...

2017-03-13 23:05:03

阅读数 212

评论数 0

C++多态 虚函数

什么是多态?       多态,字面意思理解就是有多种形态。在C++中,多态有静态多态和动态多态两种。       静态多态:也叫静态绑定和早绑定,编译器在编译期间完成,编译器根据函数实参的类型,推断出要调用的那                          个函数,如果有对应的函数就调用...

2017-03-13 19:00:21

阅读数 130

评论数 0

信号量

一、首先:我们要知道信号量是什么?        信号量的本质是数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。 这是书本上介绍的信号量的概念,自己的理解比较简单: ...

2017-03-10 20:44:41

阅读数 9677

评论数 0

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