学无止境

少年辛苦终身事,莫向光阴惰寸功。——唐·杜荀鹤《题弟侄书堂》


Python线程安全

  • 线程不安全的主要原因是我们的代码不是原子操作导致的
  • 原子操作(atomic operation),指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会切换,它类似与数据库的事务操作。
  • 为确保线程安全,我们需要人工实现原子操作,因为我们不能保证我们在多线程的情况下代码都具有原子性
  • 因此我们需要使用线程锁来使代码具有原子性
  • 代码实例
from threading import Thread, Lock

number = 0
lock = Lock()

def target():
    global number
    for _ in range(1000000):
        with lock:
            number += 1

# 开启两个线程
threads = [Thread(target=target) for _ in range(2)]
for t in threads:
    t.start()
for t in threads:
    t.join()

print(number)
  • 现在,不论你执行多少次,输出都是2000000