【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途】

        当操作系统进入多道批处理系统时代以后。一个系统中就存在多个任务,每一个任务都依照一定的算法进行调度来使用内存、cpu等共享资源。

当当中一个任务等待其它资源时,该任务能够临时睡眠,操作系统调度另外任务继续运行额,这样能够使系统资源得到最大化利用。而无需像曾经单道批处理系统那样仅仅有当一个任务完毕之后才运行下一个任务。

可是由此也引入了多任务并发的问题。

    并发就是多个任务同一时候运行,在如今的一般大型应用系统中,一个功能基本有多个任务共同完毕,每一个任务相互协调。互相配合以及交换信息。如此一来,我们须要考虑并发任务的同步与相互排斥了。
    所谓同步,就是一件事情须要依照先后顺序去完毕,当一个任务和还有一个任务通信时,任务A获取还有一个任务B的信息,当任务B未返回信息时,任务A持续等待,直到B返回信息回来,A再继续运行。

异步是和同步相对的一个概念,就是任务A向B请求信息时。不必等待B信息的返回,A请求完毕之后直接做下一件事情。

    所谓相互排斥就是某些资源在某一时刻仅仅能由一个任务占有。在某资源被任务A占有的情况下。其它须要占有该资源的任务B必须等待,任务A使用完该资源后释放后任务B才干使用该资源。一般这种资源被称作临界资源,有的时候一段程序不同意并发运行。这段程序被称作临界区。

    要解决同步相互排斥问题。 最基本的是理清楚活动者之间的同步关系, 还有某些问题中变量的相互排斥问题。我们来看看生产者消费者问题。生产者消费者问题是一个经典的进程同步问题。它描写叙述的是:
有一群生产者进程在生产产品, 并将此产品提供给消费者进程去消费。为使生产者进程和消费者进程能并发执行, 在它们之间设置有个缓冲区的缓冲池。 生产者进程可将它所生产的产品放入一个缓冲区中,消费者进程可从一个缓冲区取得一个产品消费。虽然全部的生产者进程和消费者进程都是以异步的方式执行的。但它们之间必须保持同步。即不同意消费者进程到一个空缓冲区去取产品, 也不同意生产者进程向一个已装满产品的缓冲区投放产品。
    
    我们这样来描写叙述这个问题, 假如缓冲池中有n个缓冲区。每一个缓冲区存放一个消息,生产者和消费者进程(或线程)对缓冲区相互排斥的訪问。仅仅要缓冲池未满,生产者可将消息送入缓冲池;仅仅要缓冲池未空,消费者可从缓冲池取走一个消息。 此时生产者和消费者须要保持同步。当缓冲池为空时,生产者通知消费者不要再来取数据。当不为空时,通知消费者能够来取数据。

    在linux中,实现同步与相互排斥的方法有非常多,比方信号量等,线程还有专用的线程相互排斥锁以及条件变量。本系列文章将对各种实现同步相互排斥的方法进行分析以及给出演示样例,而且大多演示样例都基于生产者消费者模型来阐述。

最新文章

  1. C#最简单例子
  2. IIS7 启用GZip压缩
  3. SAP 物料移动tcode
  4. 给Jquery动态添加的元素添加事件2
  5. 实时显示GetLastError值
  6. 12)Java Constructor
  7. Linux 下cronolog分割catalina.out文件
  8. 使用WebUploader使用,及使用后测试横拍或竖拍图片图片方向不对等解决方案
  9. Qt Sqlite封装类SqliteUtil
  10. 网易云课堂_C++开发入门到精通_章节8:设计模式
  11. 追加addclass和removeclass
  12. Vue.js 系列教程 ①
  13. 爬虫技术实现空间相册采集器V.0.0.1版本
  14. java 软件安装
  15. 关于C语言学习的一些感想(初学者)
  16. 《剑指offer》-判断平衡二叉树
  17. Scala中的柯里化
  18. shell工具-cut
  19. Postman Postman测试接口之JSON结构化数据提交
  20. JVM简介堆中新生代老年代浅析

热门文章

  1. 基本数据类型(dict)
  2. 洛谷P2756 飞行员配对方案问题 网络流_二分图
  3. Vue项目结合vux使用
  4. 在yii2.0中封装一个生成验证码的控制器
  5. GDOI2017 再次酱油记
  6. NuSOAP简介 php中使用webservice
  7. python 比较数字大小按从大到小输出
  8. 题解 P3128 【[USACO15DEC]最大流Max Flow】
  9. 【转】 值得推荐的C/C++框架和库 (真的很强大)
  10. 【转】一天学会PHP(转)