进程的同步与互斥

进程的同步互斥

    临界资源:多个进程或者线程都能操作的共享资源
    临界区:操作临界资源的代码段

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

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


    创建事件对象
    e = Event()

    设置事件阻塞
    e.wait([timeout])

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


    清除设置 当事件设置被clear后,e.wait又会阻塞
    e.clear()

    事件判断
    e.set()

# process_event.py
from multiprocessing import Process,Event

from time import sleep


def wait_event():
    print('想操作临界区')
    e.wait()
    print('开始操作临界区资源', e.is_set())
    with open('file') as f:
        print(f.read())


def wait_event_timeout():
    print('想操作临界区')
    e.wait(3)
    if e.is_set():
        with open('file') as f:
            print(f.read())
    else:
        print('不能读取文件')


# 事件对象
e = Event()
p1 = Process(target = wait_event )
p1.start()

p2 = Process(target = wait_event_timeout )
p2.start()

print('主进程操作')
with open('file', 'w') as f:
    f.write('i love china')
e.set()

print('释放临界区')
p1.join()


# 主进程操作
# 想操作临界区
# 释放临界区
# 开始操作临界区资源 True
# i love china
# 想操作临界区
# i love china

    Lock 锁
    lock = Lock()

    创建对象

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

    lock.release()解锁


    with lock:   上锁
        ....
        ....
                 解锁

# process_lock.py

from multiprocessing import Process,Lock
from time import sleep
import sys


def write1():
    # 加锁
    lock.acquire()
    for i in range(10):
        sys.stdout.write('writer1我想先向终端写入\n')
    lock.release()


def write2():
     # 加锁
    lock.acquire()
    for i in range(10):
        sys.stdout.write('writer2我想先向终端写入\n')
    # 解锁
    lock.release()

lock = Lock()
w1 = Process(target = write1)
w2 = Process(target = write2)

w1.start()
w2.start()

w1.join()
w2.join()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值