实验一
一、实验目的
(1)加深对进程并发执行的理解,认识多进程并发执行的实质。
(2)观察进程共享资源的现象,学习解决进程互斥和同步的方法。
二、实验要求:
本实验要求用高级语言,启动多进程并发运行,设计相应代码,显示进程无关并发、进程共享变量并发的运行结果。并完成实验报告。
三、实验内容:
分别实现以下四种情况的并发:
1.并发的进程之间无关,显示进程名称,开始与结束时间。
模拟多终端售票情况,并发的多个终端进程之间共享剩余票数这个共享变量。
2.用全局变量实现。
3.用进程间共享数据机制实现。
4.用进程间共享数据机制和加锁机制实现。
四、实验过程与结果
- 算法思想与设计
- 算法实现代码
- 运行结果
1.1
2.1 算法思想与设计
2.2 算法实现代码
from multiprocessing import Process
def f(dic):
dic['count'] -= 1
print(dic)
if __name__ == '__main__':
dic = {'count': 10}
p_list = []
for i in range(5):
p = Process(target=f, args=(dic,))
p.start()
p_list.append(p)
for i in p_list:i.join()
print('主进程',dic)
3.2 算法实现代码
from multiprocessing import Process,Manager
def f(dic,name):
dic['count'] -=1
print(name,dic)
if __name__ == '__main__':
m = Manager()
dic = m.dict({'count':10})
p_list = []
for i in range(5):
p = Process(target=f, args=(dic,'进程%s'%i,))
p.start()
p_list.append(p)
for i in p_list:
i.join()
print('主进程',dic)
4.2 算法实现代码
from multiprocessing import Process, Manager, Lock
def f(dic,name,lock):
lock.acquire()
dic['count'] -= 1
print(name, dic)
lock.release()
if __name__ == '__main__':
m = Manager()
lk = Lock()
dic = m.dict({'count': 10})
p_list = []
for i in range(5):
p = Process(target=f, args=(dic, lk, '进程%s' % i,))
p.start()
p_list.append(p)
for i in p_list:
i.join()
print('主进程', dic)