c++程序并发的各种实现
前言
这几天一直在面试,经常问到线程进程区别,怎么用,什么的。我虽然会教科书式回答,但在c++中没有用过,心里总是虚的。
于是下定决心,好好学习下多进程-及其进程通信方式、多线程-及其线程间通信方式,啃下这个骨头。
另外挺感谢4.11百度第一个面试官的,脑袋短路,手撕本能写出来的,太紧张了太紧张了。
最后虽然答的不好还是放我过了。。。哎 不知道什么时候能改掉自己有些特定场景紧张的坏毛病。
这几天一直在面试,经常问到线程进程区别,怎么用,什么的。我虽然会教科书式回答,但在c++中没有用过,心里总是虚的。
于是下定决心,好好学习下多进程-及其进程通信方式、多线程-及其线程间通信方式,啃下这个骨头。
另外挺感谢4.11百度第一个面试官的,脑袋短路,手撕本能写出来的,太紧张了太紧张了。
最后虽然答的不好还是放我过了。。。哎 不知道什么时候能改掉自己有些特定场景紧张的坏毛病。
不创建就找不着一些头文件,真的挺烦的。
好在支持修改默认设置了:
https://code.visualstudio.com/docs/cpp/customize-default-settings-cpp
因此打开默认设置,加入你使用的头文件目录即可,我用mingw的,所以是:
1 | "C_Cpp.default.includePath": [ |
其实上面的includePath不需要设置, VS code 会根据compilerPath推断库文件的路径。
至此就舒服了,配合code runner插件,点一下即可运行,还配置个鬼的task和c_cpp_properties。
定义一个结构体
简单实现
1 | typedef struct dataStruct |
堆栈我在早年学习微机原理的时候就已接触过。在对寄存器操作的时候,为了避免某些指令对寄存器中原先的值产生影响,在执行指令前,要进行入栈push操作,会将某些寄存器的值push到内存中,执行指令之后,执行出栈pop操作,主要作用就是现场保护与现场恢复。
1 | typedef struct dataStruct |
线性表分为顺序表和链表,链表分为单链表、双链表、循环链表(单循环链表和双循环链表)。
1 | typedef struct |
顺序表的存储单元是连续的,也就是在内存中,表的元素顺序摆放。过于简单了,随便康康定义就行了。
在存储单元之中不连续,通过指针连接起来,像链条一样故称之为链表
进程是程序执行的过程,它是动态的。包括动态创建、调度、以及消亡。当用户在终端键入一个命令的时候,将启动一个进程。
eg:
1 | vim |
这个命令启动了一个vim进程,多个用户可以同时运行vim,但是程序只有一个,位于系统目录里的/usr/bin
,每个用户的vim进程都是独立的。