多线程中有线程锁,多进程中也有进程锁。不同的是,在多线程中,数据默认是共享的,每个线程可以访问同一对象;而在多进程中,数据默认是独立的,要想在多进程中共享数据,需要使用特殊的方式实现
上面也提到了,我想重现多进程访问同一资源产生冲突的情况,就首先要构造出多进程的数据共享,如果对多进程的数据共享有疑问,可以参考上一篇文章
没有锁访问共享资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
   | from multiprocessing import Array from multiprocessing import Process import time
  def func(array):          array[0] = array[0] - 1     time.sleep(1)     print(array[0])
 
  array = Array('i', 1)
  array[0] = 9 for i in range(9):     p = Process(target=func, args=(array,))     p.start()      ------------ 0 0 0 0 0 0 0 0 0
   | 
 
加锁访问共享资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
   | from multiprocessing import RLock, Lock, Event, Condition, Semaphore from multiprocessing import Array from multiprocessing import Process import time
  def func(array, lock):     lock.acquire()          array[0] = array[0] - 1     time.sleep(1)     print(array[0])     lock.release()
 
  array = Array('i', 1)
  array[0] = 9 lock = RLock() for i in range(9):     p = Process(target=func, args=(array, lock))     p.start()      ------------ 8 7 6 5 4 3 2 1 0
   | 
 
多进程锁的种类
- RLock
 
- Lock
 
- Event
 
- Condition
 
- Semaphore
 
多进程中的锁和多线程中的锁用法是一样的,具体每个锁的用法这里就不一一举例了,可以参考多线程锁的用法
http://docs.20150509.cn/2016/07/22/线程锁/