互斥事件

线程同步和互斥

百般思念 提交于 2020-04-01 09:45:17
异步:好比赛跑,各跑各的,互不打扰 同步:好比接力赛,必须接棒后才能跑 互斥:好比独木桥,一次只能过一个 WIN32中的同步机制主要有: 1).临界区(Critical section) 2).信号量(semaphore) 3).互斥量(mutex) 4).事件(Event) 用户模式下:原子操作,临界区,通过对多线程的串行化的操作来访问公共资源或一段代码,速度快,适合控制数据访问。 内核模式下:1.互斥量:为协调共同对一个共享资源的单独访问而设计。 2.信号量:为控制一个具有有限数量用户资源而单独设计。 3.事件:用来通知线程有一些事件已经发生,从而启动后继任务的开始。 来源: https://www.cnblogs.com/liu6666/p/12610415.html

并发编程的艺术02-过滤锁算法

 ̄綄美尐妖づ 提交于 2020-03-19 20:12:26
3 月,跳不动了?>>> 导读 分析并发计算的实质就是分析时间。有时候希望事件同时发生,有时候希望事件在不同时间发生。— 《多处理器编程的艺术》 本章内容会介绍一种互斥锁算法也就是标题中所说的过滤锁算法,虽然它在实际应用中可能并不实用,但却是一种经典算法。掌握这些算法将会有助于你对并发,互斥,死锁,饥饿的理解。 互斥 mutual exclusion 在多线程环境中 所有线程共享一个共同的时间。一个线程是一个状态机,而它状态的转换称为事件。 事件是瞬时的,它们在单个瞬间发生。 在并发编程中互斥是指在同一时刻,至多只能有一个线程进入临界区内,这样的特性称为互斥 。如果并发执行的程序没有互斥特性,将会无法保障计算结果的正确性。 所以说互斥是一种安全特性 。为了直观的便于大家理解,下面会举一个生活中的例子说明互斥特性。 上图是一辆和谐号动车正在一条铁轨上行驶, 很显然在同一时刻这条铁轨的某一段中最多只能允许一辆列车在上面行驶,这就是互斥特性的体现。如果说在某一时刻这条铁轨的同一段中出现了两辆列车都在行驶,那么就会产生安全问题,这体现了互斥的安全特性 。对上面这个模型进行抽象, 时间是永远不会改变且不会受外界影响的,行驶的和谐号列车可以看作是一个运行的线程,而这条铁轨的某一段可以看作临界区 在并发编程当中与互斥特性密切相关的还有 无死锁 , 无饥饿 两个重要特性。聪明的读者应该已经想到了

什么是信号量?

折月煮酒 提交于 2020-03-11 19:51:12
信号量是一种编程概念,经常用于解决多线程问题。 我对社区的问题: 什么是信号量,如何使用? #1楼 因此,想象每个人都在尝试去洗手间,而洗手间只有一定数量的钥匙。 现在,如果没有足够的键,该人需要等待。 因此,可以将信号量视为代表可用于浴室(系统资源)的那些键集,以供不同进程(浴室行进者)请求访问。 现在想象一下试图同时去洗手间的两个过程。 那不是一个好情况,并且使用信号量来防止这种情况。 不幸的是,信号量是一种自愿机制,过程(我们的洗手间)可以忽略它(即,即使有钥匙,仍然有人可以将门打开)。 二进制/互斥量和计数信号量之间也存在差异。 在 http://www.cs.columbia.edu/~jae/4118/lect/L05-ipc.html上 查看讲义。 #2楼 构建并发程序有两个基本概念-同步和互斥。 我们将看到这两种类型的锁(信号灯通常是一种锁定机制)如何帮助我们实现同步和互斥。 信号量是一种编程结构,可通过实现同步和互斥来帮助我们实现并发。 信号量有两种类型,二进制和计数。 信号量包括两个部分:一个计数器和一个等待访问特定资源的任务列表。 信号量执行两项操作:wait(P)[就像获取锁一样],以及release(V)[类似于释放锁] –这是一个可以对信号量执行的仅有的两项操作。 在二进制信号量中,计数器在逻辑上介于0和1之间。您可以认为它类似于具有两个值的锁:打开

操作系统 200314

给你一囗甜甜゛ 提交于 2020-03-08 11:34:39
1. 互斥和同步的关系? 指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。如果用对资源的访问来定义的话,互斥某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 指在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。如果用对资源的访问来定义的话,同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。 实现同步和互斥的方式: 临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 互斥量:为协调共同对一个共享资源的单独访问而设计的。 信号量:为控制一个具有有限数量用户资源而设计。 事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 2. 死锁产生的条件? 互斥条件 (Mutual exclusion):资源不能被共享,只能由一个进程使用。 请求与保持条件 (Hold and wait):已经得到资源的进程可以再次申请新的资源。 非抢占条件 (No pre-emption)

delphi 多线程2

梦想的初衷 提交于 2020-02-18 13:43:35
多线程常用的内核对象:CreateEvent事件,CreateMutex互斥,CreateSemaphore信号,CreateWaitableTimer计时器 {建立事件} function CreateEvent( lpEventAttributes: PSecurityAttributes; {!} bManualReset: BOOL; bInitialState: BOOL; lpName: PWideChar ): THandle; stdcall; {建立互斥} function CreateMutex( lpMutexAttributes: PSecurityAttributes; {!} bInitialOwner: BOOL; lpName: PWideChar ): THandle; stdcall; {建立信号} function CreateSemaphore( lpSemaphoreAttributes: PSecurityAttributes; {!} lInitialCount: Longint; lMaximumCount: Longint; lpName: PWideChar ): THandle; stdcall; {建立等待计时器} function CreateWaitableTimer( lpTimerAttributes:

操作系统线程和进程的同步机制和通信机制

♀尐吖头ヾ 提交于 2020-02-15 00:52:52
现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段: 临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event) 1. 线程间的同步通信机制 1.1 临界区 通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问 。在 任意时刻只允许一个线程对共享资源进行访问 ,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。 1.2 互斥量 采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问 。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享 .互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。 1.3 信号量 它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目 .信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV

操作系统-进程管理

我怕爱的太早我们不能终老 提交于 2020-01-28 02:11:18
进程管理 要点: 基础:进程描述及控制 策略:进程调度 实现:互斥与同步 避免:死锁与饥饿 解决:几个经典问题 进程的引入 程序的顺序执行 源代码程序,目标程序和可执行程序 程序执行:编辑,编译,链接,执行 程序的结构:顺序,分支,循环结构 程序执行的特征:顺序性,封闭性,可再现性 程序并发执行 多道程序设计技术:多个程序并发执行 程序并发执行时的特征:间断性,非封闭性,不可再现性 并发执行引发的问题: 协调各程序的执行顺序:输入数据还未全部输入内存时,计算必须等待 多个执行程序共享系统资源,程序之间可能会相互影响,甚至影响输出结果 选择那些,多少个程序进入内存执行 内存中的执行程序谁先执行,谁后执行 内存如何有效分配? 进程的概念 定义:可并发执行的程序,在一个数据集合上的运行过程 申请、拥有资源~调度(线程) 程序:静态概念,是指令和数据的集合,可长期存储 进程与程序对应关系 一个程序可以对应一个进程或者多个进程 一个进程可以对应一个程序,或者一段程序 进程的特征 动态性 并发性 独立性 异步性 引入进程带来的问题 增加了空间开销:为进程建立数据结构 额外的时间开销:管理和协调,跟踪,填写和更新有关数据结构,切换进程,保护现场 更难控制:协调多个进程竞争和共享资源如何预防;解决多个集成因为竞争资源而出现的故障 处理机的竞争尤为突出 进程的结构 组成(进程映像):程序,数据集合

秒杀多线程系列中的题目

只愿长相守 提交于 2020-01-25 07:51:36
1. 什么是线程安全?(2012年5月百度实习生面试)   如果多线程的程序运行结果是可预期的,而且与单线程的程序运行结果一样,那么说明是“线程安全”的。 a. 线程的概念、线程的基本状态及状态之间的关系     另外, 这个网址 里面讲操作系统的知识倒是挺详实的,还有另外一种解释 线程概念   b.多线程的几种实现方法分别是什么?     这个貌似在java面试中会出现,我是专注于c++的,无视掉,但是不得不说, 秒杀多线程面试题系列 真心是个好总结   c.多线程同步与互斥有几种实现方法?都是什么?(C++)    临界区(CS:critical section)、事件(Event)、互斥量(Mutex)、信号量(semaphores),需要注意的是,临界区是效率最高的,因为基本不需要其    他的开销,二内核对象涉及到用户态和内核态的切换,开销较大,另外,关键段、互斥量具有 线程所有权 的概念,因此只可以用于线程之间互斥,而不能用到    同步中。只有互斥量能完美解决进程意外终止所造成的“遗弃问题”。   d.多线程同步和互斥有何异同,在什么情况下分别使用他们?举例说明    所谓同步,表示有先有后,比较正式的解释是“线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个    线程的消息时应等待,直到消息到达时才被唤醒。”所谓互斥

进程同步与通信

倾然丶 夕夏残阳落幕 提交于 2020-01-21 00:06:55
进程同步与通信 操作系统教程: http://c.biancheng.net/cpp/html/2592.html 进程的同步与互斥是指进程在推进时的相互制约关系。 # 进程同步 :它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系。为进程之间的直接制约关系。如生产者-消费者问题,哲学家进餐问题。 # 进程互斥 :它主要源于资源共享,是进程之间的间接制约关系。在多道系统中,每次只允许一个进程访问的资源称为临界资源,进程互斥就是保证每次只有一个进程使用临界资源。如访问控制台、打印机。 为禁止两个进程同时进入临界区,同步机制应遵循以下准则: 空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待。 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区。 让权等待:当进程不能进入临界区时, 应立即释放处理器,防止进程忙等待 。 进程同步和互斥在不同的系统中有不同的实现。 Windows中的进程同步方法有信号量、事件,互斥方法有临界区、互斥锁。 Linux中的进程同步方法有?? 互斥方法有?? 信号量是一种功能较强的机制, 可用来解决互斥与同步 的问题,它只能被两个标准的原语wait(S)和signal(S)来访问,也可以记为“P操作”和“V操作”。 Wait 原语的实现 void

进程互斥与同步

走远了吗. 提交于 2020-01-19 12:40:38
1、解释并发与并行,并说明两者关系。 并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。这种方式我们称之为并发。 并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行。 并发与并行区别:并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。 2、进程间有哪几种关系?分别要采取什么策略? 进程间存在竞争和协作关系。 3、为什么说进程的互斥也是一种同步? 进程同步是指为了完成共同的任务的并发进程基于某个条件来协调其活动,因为需要某些位 置上排定执行的先后次序而等待、传递信号或消息所产生的协作制约关系