c++程序并发的各种实现

前言

这几天一直在面试,经常问到线程进程区别,怎么用,什么的。我虽然会教科书式回答,但在c++中没有用过,心里总是虚的。

于是下定决心,好好学习下多进程-及其进程通信方式、多线程-及其线程间通信方式,啃下这个骨头。

另外挺感谢4.11百度第一个面试官的,脑袋短路,手撕本能写出来的,太紧张了太紧张了。
最后虽然答的不好还是放我过了。。。哎 不知道什么时候能改掉自己有些特定场景紧张的坏毛病。

Read more

VS code C++头文件全局配置

为什么我随便编一个简单的C/C++都要创建项目c_cpp_properties.json

不创建就找不着一些头文件,真的挺烦的。
好在支持修改默认设置了:
https://code.visualstudio.com/docs/cpp/customize-default-settings-cpp

因此打开默认设置,加入你使用的头文件目录即可,我用mingw的,所以是:

1
2
3
4
5
"C_Cpp.default.includePath": [
"C:/Program Files (x86)/mingw64/include"
],
"C_Cpp.default.compilerPath": "C:/Program Files (x86)/mingw64/bin/g++.exe",
"C_Cpp.default.intelliSenseMode": "gcc-x64",

其实上面的includePath不需要设置, VS code 会根据compilerPath推断库文件的路径。

至此就舒服了,配合code runner插件,点一下即可运行,还配置个鬼的task和c_cpp_properties。

C实现C++类(封装、继承、多态)

定义一个结构体

  1. 封装: 使用函数指针封装属性、方法到结构体中
  2. 继承: 新结构体,包含”父”结构体或指向”父”结构体
  3. 多态: (1) C++语言允许函数重载和运算符重载。 (2) C++语言通过定义虚函数来支持动态联编,动态联编是多态性的一个重要的特征。

简单实现

Read more

dataStructure->Stack

数据结构之堆栈

1
2
3
4
5
6
7
8
9
10
11
12
typedef struct dataStruct
{
elemType *LinkList;
elemType *Stack;
elemType *Queue;
elemType *String;
elemType *Array;
elemType *Tree;
elemType *Graph;
elemType *Indexing;
elemType *Sorting;
}* dataStructure;

堆栈定义

堆栈我在早年学习微机原理的时候就已接触过。在对寄存器操作的时候,为了避免某些指令对寄存器中原先的值产生影响,在执行指令前,要进行入栈push操作,会将某些寄存器的值push到内存中,执行指令之后,执行出栈pop操作,主要作用就是现场保护与现场恢复。

Read more

dataStructure->LinkList

数据结构之线性表

1
2
3
4
5
6
7
8
9
10
11
12
typedef struct dataStruct
{
elemType *LinkList;
elemType *Stack;
elemType *Queue;
elemType *String;
elemType *Array;
elemType *Tree;
elemType *Graph;
elemType *Indexing;
elemType *Sorting;
}* dataStructure;

线性表

线性表分为顺序表和链表,链表分为单链表、双链表、循环链表(单循环链表和双循环链表)。

顺序表

1
2
3
4
5
6
7
typedef struct
{
Elemtype *elem; //数组
int length; //当前表的长度
int listsize; //表的数组容量
int incrementsize; //表增容量
} SqList;

顺序表的存储单元是连续的,也就是在内存中,表的元素顺序摆放。过于简单了,随便康康定义就行了。

链表

在存储单元之中不连续,通过指针连接起来,像链条一样故称之为链表

Read more

几种排序算法

排序算法

1 冒泡(Bubble Sort)

图解

空间复杂度 1
平均时间复杂度 n^2
最坏时间复杂度 n^2
最好时间复杂度 n
稳定性 Y

算法步骤

Read more

Linux下C语言的WAITPID函数的使用

进程与程序

进程是程序执行的过程,它是动态的。包括动态创建、调度、以及消亡。当用户在终端键入一个命令的时候,将启动一个进程。

eg:

1
vim

这个命令启动了一个vim进程,多个用户可以同时运行vim,但是程序只有一个,位于系统目录里的/usr/bin,每个用户的vim进程都是独立的。

Read more