Discuss / Python / 也试着做了上一节的balance

也试着做了上一节的balance

Topic source

import threading

local_balance =threading.local()

def change_balance(): bl=local_balance.balance bi=local_balance.ini bi=bi+bl bi=bi-bl print ('Current balance is %.2f (%s)'%(bi, threading.current_thread().name))

def balance_process(n): local_balance.ini=0 local_balance.balance=n change_balance()

t1 = threading.Thread(target=balance_process,args = (5,)) t2 = threading.Thread(target=balance_process,args = (8,)) t1.start() t2.start() t1.join() t2.join()

但做的时候没想明白上一节银行存款的那个for循环有什么用处,还麻烦大家指点啦,谢谢!

Licheetools

#2 Created at ... [Delete] [Delete and Lock User]

那个for i in range(1000000)的作用是告诉系统该线程执行的次数是1000000,次数越多说明你电脑跑的快。。。

小翔32

#3 Created at ... [Delete] [Delete and Lock User]

循环100000次是让它执行的次数足够多,就有可能上一个线程在赋值的那一步, 出现下一个线程执行,传入下一个线程的参数给n,由于balance 是全局变量,线程之间通用,把另外一个线程的值传给了balance ,导致执行出来的结果和我们想的不一样,执行的次数越多,这种情况越有可能出现。


  • 1

Reply