进程互斥和同步的笔记

简介:   程之间互相竞争某一个资源,这种关系就称为进程的互斥,也就是说对于某个系统资源,如果一个进程正在使用,其他的进程就必须等待其用完,不能同时使用。   并发进程使用共享资源时,除了竞争之外有协作,要利用互通消息的办法来控制执行速度,使相互协作的进程正确工作。

  程之间互相竞争某一个资源,这种关系就称为进程的互斥,也就是说对于某个系统资源,如果一个进程正在使用,其他的进程就必须等待其用完,不能同时使用。

  并发进程使用共享资源时,除了竞争之外有协作,要利用互通消息的办法来控制执行速度,使相互协作的进程正确工作。进程之间的相互合作来完成某一任务,把这种关系称为进程的同步.

操作系统中将一次只允许一个进程访问的资源称为临界资源。一个含有访问某一临界资源的循环进程可描述如下:

    while(TRUE)

    {

      entry section

      critical section

      exit section

      remainder section

    }

 

  对进程的互斥和同步,操作系统必须采取某种控制手段,以保证进程的安全可靠执行。对互斥,要保证在临界区内不能交替执行,而谁先进入临界区都是可以的。对 同步,则要保证合作进程必须相互配合共同推进,并严格按照一定的先后顺序。用什么来保证进程的同步和互斥呢,这就是信号量机制

1.记录型信号量

    struct semaphore

       {

            int value;

            PCB *L;

       }S;

2.P、V原语操作

P原语操作的主要动作是:

 

 

 

V原语操作的主要动作是:

 

 

进程互斥和同步的实现:

 1. 用PV原语实现进程的互斥

  对于互斥的信号量S与所有的并发进程有关,所以称之为公有信号量。只要把临界区置于P(S) 和V(S)之间,即可实现进程间的互斥。(这样,每个想访问临界资源的进程,在进入临界区之前,要先对信号量S执行P操作,若该资源未被访问,则本次P操 作成功,该进程便可以进入自己的临界区,这时若再有其他的进程想进入自己的临界区,在对信号量S执行P操作后必然会失败而阻塞,从而保证了临界资源被互斥的访问。当访问临界资源的进程退出临界区后,应该再对mutex执行V操作,释放该临界资源。)

注意判断进程间是否互斥,关键是看进程间是否共享某一公有资源,一个公有资源与一个信号量相对应。在实现互斥时应注意:

(1)P(mutex)和v(mutex)必须成对出现,缺少一个都不行。缺少P(mutex)将会引起系统混乱,不能保证对临界资源的互斥访问;缺少v(mutex)将会使该临界资源永久不被释放,从而因等待该资源而阻塞的进程不再被唤醒。

(2)P(S)和V(S)的调用一定紧挨着临界区的前、后。

2. 用PV原语实现进程的同步

  与进程互斥不同,进程同步时的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关,所以称该信号量为私有信号量。利用PV原语实现进程同步的方法是:首先判断进程间的关系为同步的,且为各并发进程设置私有信号量,然后为私有信号量赋初值,最后利用PV原语和私有信号量规定各进程的执行顺序。

 

同步和互斥这两种制约关系的区别

  进程的互斥是进程间竞争共享资源的使用权,这种竞争没有固定的必然关系;而进程同步时,涉及到共享资源的并发进程之间有一种必然的依赖关系。用 PV操作解决进程同步问题时首先应确定问题是属于进程互斥还是进程同步,或是互斥与同步的混合问题。然后根据共享资源的数量以及使用共享资源的规则正确的 定义信号量及其初值。然后决定在不同信号量上应实施的P操作和V操作,用这些P操作和V操作保证并发进程正确地使用共享资源。

相关文章
|
6月前
|
供应链 安全 数据处理
操作系统高级议题:并发控制与进程互斥技术
操作系统高级议题:并发控制与进程互斥技术
112 0
|
1月前
|
Python
多进程同步之文件锁
【10月更文挑战第16天】文件锁是一种常用的多进程同步机制,它可以用于确保多个进程在访问共享资源时的互斥性。在使用文件锁时,需要注意锁的粒度、释放、竞争和性能等问题。通过合理使用文件锁,可以提高多进程程序的正确性和性能
|
6月前
|
算法 数据库
操作系统:经典进程同步问题的高级探讨
操作系统:经典进程同步问题的高级探讨
85 1
|
7月前
|
算法 安全 调度
【操作系统】进程同步与进程互斥
【操作系统】进程同步与进程互斥
74 2
|
4月前
|
消息中间件 存储 安全
python多进程并发编程之互斥锁与进程间的通信
python多进程并发编程之互斥锁与进程间的通信
|
6月前
|
数据挖掘 调度 开发者
Python并发编程的艺术:掌握线程、进程与协程的同步技巧
并发编程在Python中涵盖线程、进程和协程,用于优化IO操作和响应速度。`threading`模块支持线程,`multiprocessing`处理进程,而`asyncio`则用于协程。线程通过Lock和Condition Objects同步,进程使用Queue和Pipe通信。协程利用异步事件循环避免上下文切换。了解并发模型及同步技术是提升Python应用性能的关键。
129 5
|
5月前
|
Python
在Python中,`multiprocessing`模块提供了一种在多个进程之间共享数据和同步的机制。
在Python中,`multiprocessing`模块提供了一种在多个进程之间共享数据和同步的机制。
|
5月前
|
安全 API Python
`multiprocessing`是Python的一个标准库,用于支持生成进程,并通过管道和队列、信号量、锁和条件变量等同步原语进行进程间通信(IPC)。
`multiprocessing`是Python的一个标准库,用于支持生成进程,并通过管道和队列、信号量、锁和条件变量等同步原语进行进程间通信(IPC)。
|
7月前
|
C++
【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系
【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系
283 6
|
6月前
|
机器学习/深度学习
3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 get
3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 get

相关实验场景

更多