![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++系统编程
Kuany_
这个作者很懒,什么都没留下…
展开
-
C++两种情况实现简洁的死锁程序
C++实现简洁的死锁程序1.单线程对一个资源重复申请上锁的情况2. 两个线程对两个资源申请上锁,形成环路。1.单线程对一个资源重复申请上锁的情况#include <iostream>#include <thread>#include <mutex>#include <unistd.h>using namespace std;int data = 1;mutex mt1,mt2;void a2() { data = data * dat原创 2020-08-11 12:02:45 · 1629 阅读 · 1 评论 -
C++11中的原子操作(atomic operation)和自旋锁
C++11中的原子操作(atomic operation)1. 原子操作2. 自旋锁3. 原子操作和使用互斥锁和自旋锁的速度对比1. 原子操作 所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。 我们在原子操作之前在多线程同步中防止发生数据竞争的操作是加互斥锁,但互斥锁是操作系统这一层级的,最终映射到CPU上也是一堆指令,是指令就必然会带来额外的开销;既然CPU指令是多线程不可再分的最原创 2020-08-09 21:11:29 · 3562 阅读 · 0 评论 -
进程和线程的概念和区别?进程和线程的使用场景?
进程和线程的概念和区别?进程和线程的使用场景?1. 进程2. 什么是线程3. 进行和线程之间的区别4. 进行和线程之间的相同点5. 进程和线程的使用场景1. 进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。2. 什么是线程线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位。一个进程可以由很多个线程组原创 2020-08-09 17:40:52 · 1430 阅读 · 0 评论 -
Linux系统编程——生产者-消费者,领导者-追随者模式线程池的概念和代码
Linux系统编程——线程池的概念和代码1. 线程池结构体2. 如何使用线程池3. 线程池完整代码1. 线程池结构体typedef struct { void *(*function)(void *); /* 函数指针,回调函数 */ void *arg; /* 上面函数的参数 */} threadpool_task_t; /* 各子线程任务结构体 */ /* 描述线程池相关原创 2020-07-08 16:10:52 · 242 阅读 · 0 评论 -
10分钟搞定Linux多线程同步(互斥量,死锁、读写锁,条件变量,信号量,文件锁)
Linux C/C++多线程同步(互斥量,死锁,读写锁,条件变量,信号量,文件锁)1. 线程同步的一些概念1.1 同步的概念1.2 什么是线程同步1.3 多线程出现数据混乱(数据竞争)的原因2. 互斥量mutex2.1 mutex相关的函数和使用步骤2.1.1 初始化锁2.1.2 给共享资源加锁解锁2.2.3 摧毁锁2.2 互斥量使用的例子2.3 pthread_mutex_trylock3. 死锁4. 读写锁4.1 读写锁特性4.2 读写锁使用场景4.3 读写锁主要操作函数4.4 读写锁例子5. 条件变量原创 2020-06-18 16:41:23 · 1391 阅读 · 0 评论 -
线程的概念、优缺点和创建步骤
线程的概念、优缺点和创建步骤1. 什么是线程2. 线程共享资源与非共享资源3. 线程的优缺点4. 创建一个线程4.1 线程退出函数pthread_exit4.2 线程回收pthread_join4.3 杀死线程pthread_cancel4.4 线程分离pthread_detach4.5 判断两线程ID是否相等pthread_equal4.6 线程属性设置分离4.7 创建多个子线程5. 线程使用注意事项1. 什么是线程线程的概念:轻量级的进程,一个进程内部可以有多个线程,默认情况下一个进程只有一个线程原创 2020-06-15 12:49:44 · 1262 阅读 · 0 评论 -
守护进程的概念和创建步骤
Linux守护进程1. 进程组2. 会话1. 进程组也称之为作业。进程组ID等于第一个进程ID,因此可以通过进程ID是否等于进程组ID来判断该进程是不是进程组的组长。只要进程组中有一个进程存在,进程组就存在,哪怕组长已经没了。一个进程可以为自己或子进程设置进程组ID。2. 会话由多个进程组组成。创建会话要注意以下5点:调用进程不能是进程组组长,该进程变成新会话首进程(session header)该进程成为一个新进程组的组长进程。新会话丢弃原有的控制终端,该会话没有控制终端。该调用进原创 2020-06-15 10:30:35 · 461 阅读 · 0 评论 -
Linux下IPC方式之信号2
Linux下IPC方式之信号(signal)二3. 信号集操作函数3. 信号集操作函数内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字mask可以影响未决信号集。而我们可以在应用程序中自定义set来改变mask。已达到屏蔽指定信号的目的。...原创 2020-06-11 14:20:24 · 398 阅读 · 0 评论 -
Linux下IPC方式之信号1
Linux下IPC方式之信号(signal)一1. 信号的基本属性1.1 信号的特点1.2 信号的机制1.3 信号的产生1.4 信号的状态1.5 信号的处理方式1.6 阻塞信号集和未决信号集1.7 信号的四要素1.8 Linux常规信号一览表2. 信号的产生2.1 终端按键产生信号2.2 硬件异常产生信号2.3 `kill`函数/命令产生信号2.4 `raise`和`abort`函数2.5 时钟产生信号2.5.1 alarm函数2.5.2 setitimer函数1. 信号的基本属性1.1 信号的特点简原创 2020-06-10 16:23:14 · 480 阅读 · 0 评论 -
Linux下IPC方式之共享存储映射(mmap)
Linux下IPC方式之共享存储映射(mmap)1. 共享存储映射(mmap)2. mmap九问3. mmap实现父子进程通信4. 匿名映射5. mmap实现无血缘进程通信1. 共享存储映射(mmap)把文件中的某一段映射到内存上mmap函数原型:#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);参数:addr 建立映射原创 2020-06-09 20:05:30 · 537 阅读 · 0 评论 -
Linux下IPC方式之管道(pipe,fifo)
Linux下IPC(Interprocess Communication)方式之管道1. IPC方法2. 管道2.1 管道的概念2.2 pipe函数2.2.1 父子进程间通信简单举例2.2.2 父子进程实现pipe通信,实现ps aux | grep bash 功能2.3 管道的读写行为2.4 管道的大小和优劣2.5 FIFO通信1. IPC方法 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交原创 2020-06-09 18:31:16 · 357 阅读 · 0 评论 -
系统编程笔记
系统编程笔记exec函数族的使用如何用fork()函数创建指定数量个子进程?回收子进程-孤儿和僵尸进程,wait和waitpid方法未完,持续更新中…原创 2020-06-07 13:35:24 · 276 阅读 · 0 评论 -
系统编程-exec函数族的使用
C++exec函数族 fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户控件代码和数据完全被新程序替换,从新程序的启动例程开始执行。执行exec并不创建新进程,所以调用exec前后该进程的id并未改变。 将当前进程的.text、.data替换为所要加载的程序的.text、.data,然后让进程从新的.text第一条指令开始执行,但进程ID不变,换核不换壳。 //该函数通常用来调原创 2020-06-04 21:11:15 · 358 阅读 · 0 评论 -
系统编程-如何用fork()函数创建指定数量个子进程?
C++如何用fork函数创建指定数量个子进程?fork函数:创建一个子进程。pid_t fork(void);失败返回-1;成功返回:① 父进程返回子进程的ID(非负) ②子进程返回 0一般我们if(pid == 0){ //子进程}else if(pid > 0){ //父进程 //此时pid为子进程id}pid_t类型表示进程ID,但为了表示-1,它是有符号整型。(0不是有效进程ID,init最小,为1)注意返回值,不是fork函数能返回两个值,而是fork后,fork原创 2020-06-04 21:53:38 · 965 阅读 · 0 评论 -
系统编程-回收子进程-孤儿和僵尸进程,wait和waitpid方法
系统编程-回收子进程-孤儿和僵尸进程,wait和waitpid方法1. 孤儿进程2. 僵尸进程3. 子进程回收3.1 wait3.2 waitpid3. wait和waitpid的区别1. 孤儿进程孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。危害:没什么危害…产生孤儿进程的举例:#include <stdio.h>#include <unistd.h>int main(){ pid_t pid原创 2020-06-05 15:13:44 · 476 阅读 · 0 评论