![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
进程间通信
soulsoul_god
慢一点,当你理解的越多,需要记得就越少。
展开
-
进程间通信-信号量
1、信号量信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作),它和管道不同,它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。临界资源:具有排他性的资源临界区:访问临界资源的代码段2、信号量的工作原理由于信号量只能进行两种操作,等待和发送信号,即P, V操作:P操作:上锁,如果计数器的值大于0,就减1;如果它的值为0,就挂起该进程的执行..原创 2020-12-30 18:19:41 · 392 阅读 · 1 评论 -
进程间通信-管道
管道(PIPE):我们把一个进程连接到另一个进程的一个数据流称之为管道,是Unix中最古老的进程间通信方式。我们可以分为匿名管道和命名管道。1、匿名管道特点:只能用于具有血缘关系的进程之间通信 生命周期随进程,进程退出,管道释放 管道是半双工的,数据只能从一个方向传输 管道是基于字节流的 管道是自带同步机制的,在保证数据安全的前提下,按照特定顺序访问临界资源函数原型:#include <unisted>int pipe(int fd[2]);功能:创.原创 2020-12-30 18:14:58 · 76 阅读 · 0 评论 -
进程间通信-共享内存
共享内存(Shared Memory):映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问优点:无须复制,快捷,信息量大 缺点: 通信是通过将共享空间缓冲区直接附加到进程的虚拟地址空间中来实现的,因此进程间的读写操作的同步问题 利用内存缓冲区直接交换信息,内存的实体存在于计算机中,只能同一个计算机系统中的诸多进程共享,不方便网络通信 共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有.原创 2020-12-30 18:04:37 · 315 阅读 · 0 评论 -
线程池使用
场景:初始化时,创建好线程池,使用时,根据资源使用情况,调用多少个线程。避免了程序循环执行时,需要不停创建线程的情况。上源码:/************************************************************************* module : 线程池头文件* file name : lib_thread_pool.h* Author : * version : V1.0* DATE : * directory .原创 2020-12-29 18:38:45 · 106 阅读 · 0 评论 -
多线程pthread使用
pthread_create是操作系统创建线程的函数。它的功能是创建线程,线程创建之后,执行对应的线程函数。1、pthread_create头文件:#include <pthread.h>原型:int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg);作用:创建一个线程编译链接参数:-lpthread返回值:线程创建成功返回0,...原创 2020-12-29 18:20:22 · 881 阅读 · 0 评论 -
进程间通信-消息队列
场景:同一台linux设备下,多个进程之间数据要互相通信,就可以使用消息队列进行数据传输。消息队列(Message Queue):是消息的链表,存放在内核中并由消息队列标识符标识优点:可以实现任意进程间的通信,并通过系统调用函数来实现消息发送和接收之间的同步,无需考虑同步问题,方便 缺点:信息的复制需要额外消耗 CPU 的时间,不适宜于信息量大或操作频繁的场合消息队列提供了一个从一个进程向另一个进程发送数据块的方法,每个数据块都可以被认为是有一个类型,接收者接受的数据块可以有不同的类型。.原创 2020-12-29 18:06:14 · 400 阅读 · 0 评论 -
进程间通信-信号(一个进程往另一个进程发送信号)
程序功能:signal.c程序接收两个信号,SIGUSR1,SIGUSR2,接收到SIGUSR1之后,执行sig_usr_close函数,打印,并将全局变量m_switch置为0;接收到SIGUSR2之后,执行sig_usr_open函数,打印,并将m_switch置为1。kill.c程序主要发送两个信号,SIGUSR1,SIGUSR2。1、信号发送函数-kill()#inc...原创 2020-03-10 14:09:14 · 3261 阅读 · 0 评论 -
进程间通信,进程与线程
一、进程间通信(IPC)我们知道进程之间是相互独立的,任何一个进程的全局变量在另一个进程中是看不到的,如果进程之间需要交换数据就要通过内核。进程间通信的本质就是让两个进程看到共同的资源。进程间通信的目的:1、数据传输:一个进程需要将它的数据发送给另一个进程2、资源共享:多个进程之间共享同样的资源3、通知事件:一个进程需要向另一个进程发送消息,通知其发生了某种事情(比如进程...原创 2019-09-03 14:35:34 · 163 阅读 · 0 评论 -
linux线程间通信-信号量
锁机制使用是有限制的,锁只有两种状态,即加锁和解锁,对于互斥的访问一个全局变量,这样的方式还可以对付,但是要是对于其他的临界资源,比如说多台打印机等,这种方式显然不行了。信号量机制在操作系统里面学习的比较熟悉了,信号量是一个整数计数器,其数值表示空闲临界资源的数量。当有进程释放资源时,信号量增加,表示可用资源数增加;当有进程申请到资源时,信号量减少,表示可用资源数减少。这个时候可以把锁机制...原创 2019-09-03 14:32:16 · 624 阅读 · 0 评论 -
linux线程间通信-条件变量
条件变量(condition):可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。互斥量是防止多线程同时访问共享的互斥变量来保护临界区。条件变量是多线程间可以通过它来告知其他线程某个状态发生了改变,让等待在这个条件变量的线程继续执行。设置一个条件变量让线程1等待在一个临界区的前面,当其他线程给这个变量执行通知操...原创 2019-09-03 11:16:47 · 649 阅读 · 0 评论 -
linux线程同步-自旋锁
一、自旋锁自旋锁是专为防止多处理器并发(实现保护共享资源)而引入的一种锁机制。自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经...原创 2019-09-02 13:50:55 · 295 阅读 · 0 评论 -
linux线程同步-读写锁(reader-writer lock)
互斥锁是要么加锁要么不加锁,而且同一时刻只允许一个线程对其加锁。读写锁有更高的并行性:1、读写锁有三种状态:读模式下加速(共享)、写模式下加锁(独占)以及不加锁。2、一次只有一个线程可以占有写模式下的读写锁;但是多个线程可以同时占有读模式下的读写锁。3、读写锁在写加锁状态时,其他试图以写状态加锁的线程都会被阻塞。读写锁在读加锁状态时,如果有线程希望以写模式加锁时,必须阻塞,直...原创 2019-08-30 19:08:25 · 628 阅读 · 0 评论