目录
线程安全问题
1.什么是线程安全问题?
线程安全是指,函数或者某个函数库在多线程的模式被调用时,能够正确处理多个线程之间共享变量,使得程序可以正常运行。
线程调用时线程之间会随时发生切换会发生不可预料的结果,出现线程不安全。
2.Lock锁
为什么要出现lock锁
银行取钱案例:
金钱总数:1000¥
取钱人员A,准备从中取走600,这时银行代码要 if 总数>所取金额。在判断的过程中B也要去取钱,B也取了600,这时A那边刚判断完,要取钱了发现出现-200¥,取钱机器崩溃。
Lock锁的出现就是让一个线程可以完整的执行,不会出现多线程访问同一资源的出现数据混乱。其操作方式就是一个线程去抢锁,抢到锁了去执行,没有抢到锁的无法执行,只有等待尺有锁的线程释放才能抢锁执行。
使用Lock的两种方式:
import threading
lock = threading.Lock()
lock.acquire()
try:
# do threading
finally:
lock.release()
import threading
lock = threading.Lock()
with lock:
# do threading
代码:
import threading import time # 未加锁,取钱失败案例 class Bank(): def __init__(self, amout): self.amout = amout def draw_money(self, money, bank): if bank.amout >= money: print(threading.current_thread().name,'取钱成功') time.sleep(0.1) bank.amout -= money print(threading.current_thread().name, '余额{}'.format( bank.amout)) else: