text: linux进程及进程间同步通信机制_大隐隐于野的博客
  僵尸进程：一个进程使用fork创建子进程，如果子进程退出，而父进程并没有调用wait或waitpid获取子进程的状态信息，那么子进程的进程描述符仍然保存在系统中。
  四、进程间的通信
  信号（Signal）：信号是比较复杂的通信方式，用于通知接受进程有某种事件发生，除了用于进程间通信外，进程还可以发送信号给进程本身；linux除了支持Unix早期信号语义函数sigal外，还支持语义符合Posix.1标准的信号函数sigaction（实际上，该函数是基于BSD的，BSD为了实现可靠信号机制，又能够统一对外接口，用sigaction函数重新实现了signal函数）；
  （1） 信号
  --- 信号处理的系统调用是signal，调用形式是：
  --- 其中，signalno是规定信号编号的值，action指明当特定的信号发生时所执行的动作。
  （2） 无名管道和有名管道
  （3） 消息队列（MQ）
  --- 消息队列的每条消息由类型编号来分类，这样接收进程可以选择读取特定的消息类型——这一点与管道不同。（4） 共享存储段（SM）
  系统提供的有关SM的系统调用有：
  --- int shmget(key,size,flag)——创建大小为size的SM段，其相应的数据结构名为key，并返回共享内存区的标识符shmid；
  --- char shmat(shmid,address,flag)——将当前进程数据段的地址赋给shmget所返回的名为shmid的SM段；
  --- int shmdr(address)——从进程地址空间删除SM段；
  --- int shmctl (shmid,cmd,buf)——对SM的控制操作；
  （5） 信号灯
  --- 信号灯保证了某一时刻只有一个进程访问某一临界资源，所有请求该资源的其它进程都将被挂起，一旦该资源得到释放，系统才允许其它进程访问该资源。
  进程间通信的实现技术的特点是：操作系统提供实现机制和编程接口，由用户在程序中实现，保证进程间可以进行快速的信息交换和大量数据的共享。
  五、线程
  pthread_exit(0);或者运行结束
  主线程阻塞等待子线程：
  分离：
  子线程调用：
  或 父进程调用：
  子线程分为分离状态和join状态，join状态子线程运行结束后，一些资源不会释放，调用pthread_join后，资源才释放。
  1、线程优点：
  所有线程可以直接共享内存和变量等(线程的栈是单独分配的，但是也是在同一地址空间)； (与多进程相比，缺点是线程同步需要锁，线程出问题可能影响整个程序)
  (与单进程相比)
  2、多进程的优点：
  不需要线程同步的锁；
  各进程独立，不互相影响。
  3、线程同步：
  多个线程共享相同内存时，需要确保每个线程看到一致的数据。
  linux基本的同步机制：
  一、互斥量（mutex）
  读写锁可以由三种状态： 读模式下加锁状态 、 写模式下加锁状态 、 不加锁状态 。
  1) 初始化和销毁
  2) 读加锁和写加锁
  获取锁的两个函数是阻塞操作
  还有两种同步机制：
  四、条件变量(condition)
  如果线程正在等待共享数据内某个条件出现，那会发生什么呢？
  pthread_cond_wait 执行的流程首先将这个mutex解锁, 然后等待条件变量被唤醒, 如果没有被唤醒, 该线程将一直休眠, 也就是说, 该线程将一直阻塞在这个pthread_cond_wait调用中, 而当此线程被唤醒时, 将自动将这个mutex加锁，然后再进行条件变量判断（原因是“惊群效应”，如果是多个线程都在等待这个条件，而同时只能有一个线程进行处理，此时就必须要再次条件判断，以使只有一个线程进入临界区处理。），如果满足，则线程继续执行，最后解锁，
  五、信号量：
  主要用到的函数：
  大隐隐于野3 点赞踩
  复制链接 扫一扫 专栏目录进程 同步 的两种实现
  2、Windows 环境下常用的同步 方式有： 计时器、信号量、事件、互斥锁
  缺点：虽然临界区 同步 速...2、system V IPC对象：共享内存、消息队列、信号灯集、套接字（网络编程使用）
  Linux 内核提供了多种并发访问的保护 机制 ，例如原子操作、自旋锁、信号量、互斥体、读写锁、RCU等，我们需要了
  进程间 同步 的方式
  1.通过设置互斥量的属性实现
  互斥量初始化函数
  通过设置pthread_mutexattr_t实现 进程 同步 ，pthread_mutexattr_t相关函数如下：
  int pthread_mutexattr_init(pthread_mutexattr_t *attr)初始化
  Linux 系统中提供了wait()函数和waitpid
  exec函数族，
  特殊 进程 (孤儿，僵尸 进程 )，
  exec函数族：
  一个 进程 调用exec类函数，它本身就"死亡"了，系统把代码段替换成新的程序代码，废弃原有数据段和堆栈段，并为新程序分配新数据段与堆栈段，
  包含的函数如下：
  共享变量的修改冲突一竞争关系 进程 之间的同步 关系 进程 间的制约关系
  （1）竞争关系:有些资源需要互斥使用，因此各 进程 竞争使用这些资源一独占分配到的部分或全部共享资源， 进程 的这种关系为 进程 的互斥
  即一个 进程 运行到某一点时要求另一伙伴 进程 为它提供消息，在未获得消息之前该 进程 处于等待
  一. 进程 同步 在 Linux 下， 进程 同步 的解决方式主要有三种：
  详情可看博文：
  实现 进程 间 同步 主要有如下方法：
  Linux 进程 间 同步 和 通信 , linux 进程 间的同步 方法
  linux 编程3： 进程 同步
  linux编程3： 进程 管理2
  功能：挂起 进程 ， 进程 进入阻塞状态，直到子 进程 变为僵尸态，
  如果捕获到子 进程 的退出信息就会转为运行态，然后回收子 进程 资源并返回；
  若当前进程 有多个子 进程 ，只要捕获到一个变为僵尸态的子 进程 ，wait函数就会恢复执行态。
  参数： int型指针 status 用于存放子进
  linux 的并发与竞争
  并发与竞争简介
  并发就是多个“用户”同时访问一个资源（所以解决的方法就是让这一个资源每个时刻只能有一个用户访问，hhh）Linux 系统并发产生的原因，主要有以下几种
  多线程并发访问， linux 是多任务（线程）的系统
  抢占式并发访问，从2.6版本内核开始， linux 内核支持抢占，也就是说调度程序可以在任意时刻抢占正在运行的线程，从而运行其他的线程
  中断程序并发访问
  上面指的资源就是临界区临界区就是共享
  程序每次运行结果和单线程运行的结果是一样的，而且其他的变量的值也和预期的一样的，这就是线程安全
  Linux —— 进程 间 同步 笔记
  文章目录前言一、互斥量Mutex1.应用函数二、fcntl函数1.函数2.注意事项
  前言进程 间 同步 和线程 间 同步 原因一样，都是为了防止数据混乱，提出 同步 机制 实现 进程 间 同步 方法：互斥量Mutex 和 fcntl函数
  一、互斥量Mutex
  要在thread_mutex_init函数使用前将其属性进行初始化。
  1.应用函数
  Linux 编程基础 3.3： 进程 同步
  lyp82d_LF的博客
  wait() 函数
  wait() 函数存在于系统库函数 sys/wait.h 中，形式如下：
  调用 wait() 的进程 会被挂起，进入阻塞状态，直到子 进程 变为僵尸态，如果捕获到子 进程 的退出信息就会转为运行态，然后回收子 进程 资源并返回；