'''
多线程和多进程最大的不同在于，多进程中，同一个变量，各自有一份拷贝存在于每个进程中，互不影响，而多线程中，所有变量都由所有线程共享，所以，任何一个变量都可以被任何一个线程修改，因此，线程之间共享数据最大的危险在于多个线程同时改一个变量，把内容给改乱了。
'''
# 改乱的demo
# 两个线程同时存取会造成数据紊乱
import time, threading
# 假定数据
balance = 0
def change_it(n):
  # 先存后取, 结果应该为 0
  global balance
  balance += n
  balance -= n
def run_thread(n):
  for i in range(1000000):
    change_it(n)
t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
print(balance)
'''
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143192823818768cd506abbc94eb5916192364506fa5d000
'''

5d0316338822e473edfe2d497f371b3d10773524
<mask token>


def change_it(n):
    global balance
    balance += n
    balance -= n


def run_thread(n):
    for i in range(1000000):
        change_it(n)


<mask token>

<mask token>


def change_it(n):
    global balance
    balance += n
    balance -= n


def run_thread(n):
    for i in range(1000000):
        change_it(n)


<mask token>
t1.start()
t2.start()
t1.join()
t2.join()
print(balance)
<mask token>

<mask token>
balance = 0


def change_it(n):
    global balance
    balance += n
    balance -= n


def run_thread(n):
    for i in range(1000000):
        change_it(n)


t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
print(balance)
<mask token>

<mask token>
import time, threading
balance = 0


def change_it(n):
    global balance
    balance += n
    balance -= n


def run_thread(n):
    for i in range(1000000):
        change_it(n)


t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
print(balance)
<mask token>

'''
多线程和多进程最大的不同在于，多进程中，同一个变量，各自有一份拷贝存在于每个进程中，互不影响，而多线程中，所有变量都由所有线程共享，所以，任何一个变量都可以被任何一个线程修改，因此，线程之间共享数据最大的危险在于多个线程同时改一个变量，把内容给改乱了。
'''
# 改乱的demo
# 两个线程同时存取会造成数据紊乱
import time, threading
# 假定数据
balance = 0
def change_it(n):
  # 先存后取, 结果应该为 0
  global balance
  balance += n
  balance -= n
def run_thread(n):
  for i in range(1000000):
    change_it(n)
t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
print(balance)
'''
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143192823818768cd506abbc94eb5916192364506fa5d000
'''
