多任务的同步与相互排斥

现代操作系统基本都是多任务操作系统,即同一时候有大量可调度实体在执行。在多任务操作系统中,同一时候执行的多个任务可能:

  • 都须要訪问/使用同一种资源
  • 多个任务之间有依赖关系。某个任务的执行依赖于还有一个任务

这两种情形是多任务编程中遇到的最主要的问题,也是多任务编程中的核心问题,同步和相互排斥就是用于解决这两个问题的。

相互排斥:是指散步在不同任务之间的若干程序片断,当某个任务执行当中一个程序片段时,其他任务就不能执行它们之中的任一程序片段,仅仅能等到该任务执行完这个程序片段后才干够执行。最主要的场景就是:一个公共资源同一时刻仅仅能被一个进程或线程使用。多个进程或线程不能同一时候使用公共资源。

同步:是指散步在不同任务之间的若干程序片断。它们的执行必须严格依照规定的某种先后次序来执行,这样的先后次序依赖于要完毕的特定的任务。

最主要的场景就是:两个或两个以上的进程或线程在执行过程中协同步调,按预定的先后次序执行。

比方 A
任务的执行依赖于 B 任务产生的数据。

显然,同步是一种更为复杂的相互排斥,而相互排斥是一种特殊的同步。也就是说相互排斥是两个任务之间不能够同一时候执行,他们会相互排斥,必须等待一个线程执行完成。还有一个才干执行。而同步也是不能同一时候执行。但他是必需要安照某种次序来执行对应的线程(也是一种相互排斥)。因此相互排斥具有唯一性和排它性。但相互排斥并不限制任务的执行顺序,即任务是无序的,而同步的任务之间则有顺序关系。

转自:http://blog.csdn.net/tennysonsky/article/details/46273709

时间: 2024-12-14 08:52:17

多任务的同步与相互排斥的相关文章

Linux同步与相互排斥应用(零):基础概念

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途] 当操作系统进入多道批处理系统时代以后.一个系统中就存在多个任务,每一个任务都依照一定的算法进行调度来使用内存.cpu等共享资源. 当当中一个任务等待其它资源时,该任务能够临时睡眠,操作系统调度另外任务继续运行额,这样能够使系统资源得到最大化利用.而无需像曾经单道批处理系统那样仅仅有当一个任务完毕之后才运行下一个任务. 可是由此也引入了多任务并发

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

各位看官们.大家好,上一回中咱们说的是进程间同步与相互排斥的样例,这一回咱们说的样例是:使用信号量进行进程间同步与相互排斥. 闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,信号量是由著名计算机科学家迪杰斯特拉(Dijkstra)提出的一种概念,专门用来解决进程间同步与相互排斥.在他提出的概念中信号量是一个非负整数值. 信号量的操作仅仅能有两种原子操作: 等待信号; 发送信号. "什么是原子操作呢?"台下有看官在提问.原子操作就是指某个动作在运行时不能被其他动作中断,它会一

线程同步与相互排斥:相互排斥锁

为什么须要相互排斥锁? 在多任务操作系统中,同一时候执行的多个任务可能都须要使用同一种资源.这个过程有点类似于,公司部门里.我在使用着打印机打印东西的同一时候(还没有打印完).别人刚好也在此刻使用打印机打印东西,假设不做不论什么处理的话,打印出来的东西肯定是错乱的. 以下我们用程序模拟一下这个过程.线程一须要打印" hello ",线程二须要打印" world ",不加不论什么处理的话.打印出来的内容会错乱: [cpp] view plaincopy #includ

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

为什么会有线程同步的概念呢?为什么要同步?什么是线程同步?先看一段代码: package com.maso.test; public class ThreadTest2 implements Runnable{ private TestObj testObj = new TestObj(); public static void main(String[] args) { ThreadTest2 tt = new ThreadTest2(); Thread t1 = new Thread(tt,

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

1. 什么是相互排斥量 相互排斥量从本质上说是一把锁,在訪问共享资源前对相互排斥量进行加锁,在訪问完毕后释放相互排斥量上的锁. 对相互排斥量进行加锁以后,不论什么其它试图再次对相互排斥量加锁的线程将会被堵塞直到当前线程释放该相互排斥锁.假设释放相互排斥锁时有多个线程堵塞,所以在该相互排斥锁上的堵塞线程都会变成可进行状态.第一个变成执行状态的线程能够对相互排斥量加锁.其它线程在次被堵塞,等待下次执行状态. pthread_mutex_t 就是POSIX对于mutex的实现. 函数名 參数 说明 p

进程同步与相互排斥:POSIX有名信号量

在 POSIX 标准中,信号量分两种,一种是无名信号量,一种是有名信号量. 无名信号量一般用于线程间同步或相互排斥,而有名信号量一般用于进程间同步或相互排斥. 它们的差别和管道及命名管道的差别类似.无名信号量则直接保存在内存中,而有名信号量要求创建一个文件.前面我们学习了无名信号量的使用(详情请看<无名信号量>).这里我们学习有名信号量的使用. 1)创建一个有名信号量 所需头文件: #include <fcntl.h> #include <sys/stat.h> #in

Linux相互排斥与同步应用(三):posix线程实现单个生产者和单个消费者模型

[版权声明:尊重原创.转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu.文章仅供学习交流,请勿用于商业用途] 在第一节说到了生产者消费者问题,这一节我们来实现这样一个稍作改动的模型: 初始时缓冲区为空.生产者向缓冲区写入数据.消费者在缓冲区为空的情况下睡眠,当生产者写满缓冲区一半之后后通知消费者能够開始消费.生产者開始睡眠.直到消费者消费完缓冲区一半后通知生产者能够開始生产为止,当中生产者和消费者对缓冲区的訪问时相互排斥的. 以下来看一下实现: #in

多任务的同步与互斥

现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行.在多任务操作系统中,同时运行的多个任务可能: 都需要访问/使用同一种资源 多个任务之间有依赖关系,某个任务的运行依赖于另一个任务 这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的. 互斥:是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该任务运行完这个程序片段后才可以运行.最基本的场景就是:一个公共资

RAII手法封装相互排斥锁

CriticalSectionWrapper是一个接口类 class CriticalSectionWrapper { public: // Factory method, constructor disabled static CriticalSectionWrapper* CreateCriticalSection(); virtual ~CriticalSectionWrapper() {} // Tries to grab lock, beginning of a critical se