标签:增加 semaphore lse 过程 RoCE set get style 不能
def getmoney(num): for i in range(100): num += 1 def setmoney(num): for i in range(100): num -= 1 if __name__ == ‘__main__‘: num = 100 p = Process(target=getmoney,args=(num,)) p1 = Process(target=setmoney,args=(num,)) p.start() p1.start() print(num)
def getmoney(num): for i in range(100): num.value += 1 time.sleep(0.01) def setmoney(num): for i in range(100): num.value -= 1 time.sleep(0.01) if __name__ == ‘__main__‘: num = Value(‘i‘,100) p = Process(target=getmoney,args=(num,)) p1 = Process(target=setmoney,args=(num,)) #进程p和p1相对于主进程来说是同步执行 #执行过程中会发生数据错乱 p.start() p1.start() #同步主进程 p.join() p1.join() print(num.value) #输出结果:93
#为什么会发生数据错乱
1.模块Lock:
def getmoney(num,l): #为程序增加锁机制,不到释放锁的时候,程序会一直停留在其中 l.acquire() for i in range(100): num.value += 1 time.sleep(0.01) l.release() def setmoney(num,l): l.acquire() for i in range(100): num.value -= 1 time.sleep(0.01) l.release() if __name__ == ‘__main__‘: l = Lock() num = Value(‘i‘,100) p = Process(target=getmoney,args=(num,l)) p1 = Process(target=setmoney,args=(num,l)) #进程p和p1相对于主进程来说是同步执行 #执行过程中会发生数据错乱 p.start() p1.start() #同步主进程 p.join() p1.join() print(num.value)
Event模块:e = Event():
e = Event() print(e.is_set())#默认为False e.set() #将is_set设置为True,如果没有这句,遇到阻塞将不往下执行 print(123) print(e.is_set()) #这为True,wait()才会执行 e.wait() print(456) print(e.is_set()) #这也为True e.clear()#设置为False print(e.is_set()) e.wait()#执行不了,程序阻塞在此 print(555) #输出结果 False 123 True 456 True False
标签:增加 semaphore lse 过程 RoCE set get style 不能
原文地址:https://www.cnblogs.com/0627zhou/p/9512904.html