什么是临界区?

每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。

进程间同步

把异步环境下的一组并发进程因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。

实现进程间同步主要有如下方法:

信号量

用P、V原语

生产者-消费者模型

1 信号量
一种最为简单和直观的方法是直接制约的进程互相给对方进程发送执行条件已经具备的信号。这样,被制约进程即可省去对执行条件的测试,只要收到了制约进程发来的信号便开始执行,而在未收到制约进程发来的信号时便进入等待状态。

2 用P、V原语
P操作:

p(s)是一个原语操作,p操作执行 s– ,若s为负数,调用p(s)的进程被阻塞,放到等待队列q中。

V操作

v(s)刚好与p(s)操作相反,v操作执行 s++ ,若s为大于0,继续执行;s <=0,从信号灯等待队列移出一个进程,解除等待状态,返回本程序继续执行。

使用P、V原语操作实现进程间的同步,分为3步:

首先为各并发进程设置私用信号量
然后为私用信号量赋初值
最后利用P、V原语和私用信号量规定各进程的执行顺序
3 生产者-消费者模型
并发进程同步和互斥问题,一般都可以抽象为生产者-消费者问题。

4 参考资料
张尧学著《计算机操作系统教程》第4版
————————————————
版权声明:本文为CSDN博主「线上幽灵」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chen134225/article/details/81772185

进程间同步的几种方法相关推荐

  1. 线程间同步的几种方法--互斥锁,条件变量,信号量,读写锁

    一.互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码. 1 . 初始化锁 int pthread_mutex_init(pthread_mutex_t *mutex,cons ...

  2. 线程间通信的三种方法 (转)

    http://www.cnblogs.com/puxidun/archive/2009/12/06/1618142.html 线程间通信的三种方法 多线程通信的方法主要有以下三种:  1.全局变量 进 ...

  3. linux如何创建共享内存,linux实现共享内存同步的四种方法

    https://blog.csdn.net/sunxiaopengsun/article/details/79869115 本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进 ...

  4. 如何保证进程间同步工作_系统设计硬核知识(2)——操作系统的进程管理

    操作系统基本原理包含以下 5 大管理. 我们先来说说进程管理. 因为处理机是计算机系统的核心资源,所以整个操作系统的重心是处理机管理. 处理机管理中最基本的.最重要的概念是进程.进程是系统并发执行的体 ...

  5. android p获取通话记录_Android 底层的进程间同步机制

    作者:Android面试官 进程间通信的经典实现 进程间通信(Inter-process communication,IPC)指运行在不同进程中的若干线程间的数据交换,可发生在一台机器上,也可通过网络 ...

  6. C# 线程同步的几种方法

    有时候必须访问变量.实例.方法.属性或者结构体,而这些并没有准备好用于并发访问,或者有时候需要执行部分代码,而这些代码必须单独运行,这是不得不通过将任务分解的方式让它们独立运行. 当任务和线程要访问共 ...

  7. C#线程同步的几种方法

    在网上也看过一些关于线程同步的文章,其实线程同步有好几种方法,下面我就简单的做一下归纳. 一.volatile关键字 volatile是最简单的一种同步方法,当然简单是要付出代价的.它只能在变量一级做 ...

  8. 进程间同步(互斥量、信号量)

    进程间同步可以使用互斥量mutex(互斥锁).信号量和文件锁. 进程间同步使用信号量: int sem_init(sem_t *sem, int pshared, unsigned int value ...

  9. linux 进程间读写锁,Linux系统编程—进程间同步

    我们知道,线程间同步有多种方式,比如:信号量.互斥量.读写锁,等等.那进程间如何实现同步呢?本文介绍两种方式:互斥量和文件锁. ##互斥量mutex 我们已经知道了互斥量可以用于在线程间同步,但实际上 ...

最新文章

  1. 思科PIX防火墙的实际应用配置
  2. 为什么老外不愿意用MyBatis?
  3. ABBYY PDF Transformer+支持的格式
  4. python 去除多个换行
  5. USTC English Club Note20211215
  6. java代码杨辉三角_用java实现杨辉三角的示例代码
  7. [CQOI2015]选数(杜教筛)
  8. 使用@Order调整配置类加载顺序
  9. gazebo 直接获取传感器数据_5个使传感器更简单的技巧
  10. oracle中sql语句的优化
  11. powerdesigner 16设计mysql数据库_PowerDesigner16 连接MySql 报错
  12. 关于小微商户反欺诈监控指标的内容参考
  13. ORACLE 数据库的级联查询 一句sql搞定(部门多级)
  14. 全国高级计算机职称考试试题及答案,最新全国计算机职称考试试题及答案.doc...
  15. 【音视频数据数据处理 6】【RGB篇】将RGB24图片转为YUV420格式图片
  16. css漂亮的侧导航栏,jQuery+css实现非常漂亮的水平导航菜单效果
  17. Windwos cwRsync 服务端及客户端安装配置全攻略
  18. ssc335调试isp记录之色彩篇
  19. EPA PMF正定因子分解模型程序破解
  20. 日常英语单词 - 足球

热门文章

  1. eclipse目录发布到tomcat对应的目录
  2. SpringMVC框架----ModelAttribute注解
  3. 分治之快速排序以及快速排序为何最快
  4. Java开发人员常用网站收录
  5. homebrew 安装 formula 的不同历史版本——以安装 node 为例
  6. 关于java AudioInputStream播放短音频没声音的问题
  7. calling c++ from golang with swig--windows dll(一)
  8. Ruby中的字符串与符号
  9. 修改本机域名服务器为Google Public DNS或者OpenDNS
  10. Windows下如何生成数字证书