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

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

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

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

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

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

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

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

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

Linux同步与相互排斥应用(零):基础概念的更多相关文章

  1. 一起talk C栗子吧(第一百回:C语言实例--使用信号量进行进程间同步与相互排斥一)

    各位看官们.大家好,上一回中咱们说的是进程间同步与相互排斥的样例,这一回咱们说的样例是:使用信号量进行进程间同步与相互排斥. 闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,信号量是由著名 ...

  2. Linux从入门到放弃、零基础入门Linux(第四篇):在虚拟机vmware中安装centos7.7

    如果是新手,建议安装带图形化界面的centos,这里以安装centos7.7的64位为例 一.下载系统镜像 镜像文件下载链接https://wiki.centos.org/Download 阿里云官网 ...

  3. Linux从入门到放弃、零基础入门Linux(第三篇):在虚拟机vmware中安装linux(二)超详细手把手教你安装centos6分步图解

    一.继续在vmware中安装centos6.9 本次安装是进行最小化安装,即没有图形化界面的安装,如果是新手,建议安装带图形化界面的centos, 具体参考Linux从入门到放弃.零基础入门Linux ...

  4. Linux多线程同步之相互排斥量和条件变量

    1. 什么是相互排斥量 相互排斥量从本质上说是一把锁,在訪问共享资源前对相互排斥量进行加锁,在訪问完毕后释放相互排斥量上的锁. 对相互排斥量进行加锁以后,不论什么其它试图再次对相互排斥量加锁的线程将会 ...

  5. Android多线程研究(3)——线程同步和相互排斥及死锁

    为什么会有线程同步的概念呢?为什么要同步?什么是线程同步?先看一段代码: package com.maso.test; public class ThreadTest2 implements Runn ...

  6. Linux从入门到放弃、零基础入门Linux(第二篇):在虚拟机vmware中安装linux(一)超详细手把手教你安装centos分步图解

    一.Vmware vmware介绍:VMware,Inc. (Virtual Machine ware)是一个“虚拟PC”软件公司,提供服务器.桌面虚拟化的解决方案.其虚拟化平台的产品包括播放器:它能 ...

  7. Linux从入门到放弃、零基础入门Linux(第一篇):计算机操作系统简介、linux介绍

    一.计算机操作系统简介 操作系统的定义: 操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间. 操作系统的内核的定义: 操作系统的内核是一个管理和控制程序,负责 ...

  8. Linux下进程的同步相互排斥实例——生产者消费者

    linux下的同步和相互排斥 Linux sync_mutex 看的更舒服点的版本号= = https://github.com/Svtter/MyBlog/blob/master/Linux/pth ...

  9. Linux互斥和同步应用程序(一):posix线程和线程之间的相互排斥

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流.请勿用于商业用途] 有了进程的概念,为何还要使用线程呢? 首先,回 ...

随机推荐

  1. CSS3-----transform 转换

    transforn  可以转换元素,其中主要属性有:rotate() / skew() / scale() / translate()以下4种. transform:rotate():旋转:其中“de ...

  2. 企业微信H5支付返回不到自己指定的结果页面

    项目:vue做的H5项目,嵌入到企业微信里 发现的问题:支付完成后的跳转页面 跳转不到自己指定的页面 问题在于:调支付接口时,redirectUrl: document.location.protoc ...

  3. 【转载】02-PowerDesigner的下载及安装

    原创路径:https://blog.csdn.net/ruyu00/article/details/79842807 一.下载 下载路径:https://pan.baidu.com/s/1WD7QHT ...

  4. ActiveMQ:JMS开源框架入门介绍

    介绍基本的JMS概念与开源的JMS框架ActiveMQ应用,内容涵盖一下几点: 基本的JMS概念 JMS的消息模式 介绍ActiveMQ 一个基于ActiveMQ的JMS例子程序 一:JMS基本概念 ...

  5. py_One

    1.Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分 ...

  6. caioj 1152 快速求模 (快速幂)

    (1)开long long,不然中间结果会溢出 (2)注意一开始的初始化,保险一点. #include<cstdio> #include<cctype> #include< ...

  7. PKU 2184 Cow Exhibition 01背包

    题意: 有一些牛,每头牛有一个Si值,一个Fi值,选出一些牛,使得max( sum(Si+Fi) ) 并且 sum(Si)>=0, sum(Fi)>=0 思路: 随便选一维做容量(比如Fi ...

  8. JVM分代通俗解释

    JVM分代通俗解释 学习了:https://www.cnblogs.com/zgghb/p/6428395.html

  9. jstack命令dump线程信息

    jstack命令dump线程信息 D:\Java\jdk1.8.0_05\bin>jstack.exe 6540 > dump17 6540为java 线程pid: 出来的dump17文件 ...

  10. 可替代google的各种搜索引擎

    http://www.aol.com http://www.duckduckgo.com http://www.gfsoso.com http://www.googlestable.com  http ...