美文网首页
进程的同步与互斥

进程的同步与互斥

作者: 遇明不散 | 来源:发表于2019-04-19 11:33 被阅读0次

同步和互斥

临界资源

对多个进程或者线程都可见的资源,容易产生争夺,这类资源称为临界资源

临界区

对临界资源进行操作的代码区域称为临界区

解决资源争夺

同步或者互斥

同步

同步是一种合作关系,为完成某种任务,多进程或者多线程之间形成一种协调,按照约定或条件执行操作临界资源。

互斥

互斥是一种制约关系,当一个进程或者线程使用临界资源时进行上锁处理,当另一个进程使用时会阻塞等待,直到解锁后才能继续使用。

进程同步机制

事件

通过设置阻塞,方便对临界资源进行操作

事件基本函数
from multiprocessing import Event

#创建事件对象
e = Event()

# 设置事件阻塞,直到e被set之后才结束阻塞
e.wait([timeout])

# 事件设置 当事件被设置后e.wait()不再阻塞
e.set()

# 事件状态判断,判断e是否被设置的状态
e.is_set()

# 清除设置 当事件设置被clear后 e.wait又会阻塞
e.clear()
事件实现示例
# event.py
from multiprocessing import Event,Process
import os
from time import sleep

def fun1():
    print('进程1想要操作临界区')
    
    # 进入阻塞状态
    e.wait()

    with open('file.txt') as f:
        print('进程1:',f.read())

def fun2():
    print('进程2也要操作临界区')

    # 2s后不在阻塞
    e.wait(2)

    if e.is_set():
        with open('file.txt') as f:
            print('进程2:',f.read())
    else:
        print('我靠,我没读到内容')

# 创建事件对象
e = Event()

p1 = Process(target = fun1)
p2 = Process(target = fun2)
p1.start()
p2.start()

sleep(3)

with open('file.txt','w') as f:
    f.write('I love China')

# 设置后e.wait()不再阻塞
e.set()

p1.join()
p2.join()

acquire()为一个条件阻塞函数,当有任意一个进程先进行了acquire操作后,其他进程再企图进行acquire操作时就会阻塞,直到lock对象被release后其他进程才可进行下一次acquire操作

锁基本函数
# 创建锁对象
lock = Lock() 

# 上锁,如果锁已经是上锁状态调用此函数会阻塞
lock.acquire() 

# 解锁
lock.release() 

# 实现加锁解锁
with lock
锁实现示例
# lock.py
from multiprocessing import Lock,Process
import sys

def fun1():
    # 加锁
    lock.acquire()
    for i in range(10):
        sys.stdout.write('fun1\n')
    # 解锁
    lock.release()

def fun2():
    # 加锁
    # lock.acquire()
    with lock:
        for i in range(10):
            sys.stdout.write('fun2\n')
    # 解锁
    # lock.release()

# 创建锁对象
lock = Lock()

p1 = Process(target = fun1)
p2 = Process(target = fun2)

p1.start()
p2.start()

p1.join()
p2.join()

相关文章

  • 操作系统拾遗--进程同步、互斥

    进程通信 进程通信--进程之间的信息交换,如同步、互斥。 进程通信分为: 低级通信方式:同步与互斥 高级通信方式:...

  • 操作系统

    一.进程管理 (一)进程的状态 (二)前驱图 (三)进程的同步与互斥 互斥:单独资源,一...

  • 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别

    进程同步与互斥的区别? 进程的同步方式有哪些? 进程的通信方式有哪些? 进程同步与通信的区别是什么? 线程的同步/...

  • 进程的同步与互斥

    同步和互斥 临界资源 对多个进程或者线程都可见的资源,容易产生争夺,这类资源称为临界资源 临界区 对临界资源进行操...

  • 进程管理(一)进程操作

    进程创建 、进程执行映像和加载、进程运行(进程调度)、进程间的互斥与同步、进程间通信、进程终止 1、进程创建 PC...

  • 操作系统学习笔记(十三)

    同步和互斥的概念 进程的互斥关系 进程的互斥关系的例子 定义: 多个进程由于共享了独占性资源,必须协调各进程对资源...

  • 信号量机制

    进程之间的制约关系有两种:同步与互斥 为什么需要互斥 因为操作系统会调度进程,并且有多个处理器在运行不同的进程,使...

  • 第二十三章 进程间通信介绍(一)

    本章目标: 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对...

  • 操作系统之信号量

    进程互斥:是指系统中各进程互斥使用临界值,又称为进程间接制约。进程同步:是并发执行的进程因直接制约而引起的相互通信...

  • Python多线程

    进程间同步互斥方法lock from multiprocessing import Lock 创建 进程锁对象lo...

网友评论

      本文标题:进程的同步与互斥

      本文链接:https://www.haomeiwen.com/subject/mhzfgqtx.html