python threading Python threading锁:不加上它,你的共享变量就等着被撕碎
用以线程之间互斥访问之情况的同步原语是锁(Lock)在内那个范畴里的, 它能够被用来对共享资源予以保护, 可确保在任何一个时刻之时, 仅有单独的一个线程能够去访问共享资源, 借由这样的方式进而防止多线程并发访问所引发出的数据竞争以及不一致性的状况产生。于下面之处分别去详细地说明锁的使用以及所有的功能, 并且给出示例:
锁的使用:
访问控制涉及对共享资源, 是要借助锁, 以获取以及释放的途径达成的。一旦有线程获取到锁, 别的线程便获取不到锁, 只能等待锁被释放, 之后才能够继续执行。
锁的所有功能:
示例1:使用锁实现对共享变量的互斥访问
import threading # 创建一个锁对象 lock = threading.Lock() # 共享资源 count = 0 # 线程函数 def thread_func(): global count for _ in range(100000): # 获取锁 lock.acquire() try: # 对共享资源进行操作 count += 1 finally: # 释放锁 lock.release() # 创建并启动多个线程 threads = [] for _ in range(4): thread = threading.Thread(target=thread_func) thread.start() threads.append(thread) # 等待线程执行完毕 for thread in threads: thread.join() # 打印最终结果 print("Final count:", count)于上述所举示例之内, 我们构建了一个锁对象lock, 并且设定了一个共享变量count。在任意一个线程的执行函数环节当中, 先是借助lock.()去获取锁, 接着针对那共享变量开展操作, 最终经由lock.()来释放锁。
示例2:锁的可重入性
import threading # 创建一个锁对象 lock = threading.Lock() # 线程函数 def thread_func(): with lock: print("Outer lock acquired!") with lock: print("Inner lock acquired!") # 创建并启动线程 thread = threading.Thread(target=thread_func) thread.start() thread.join()于上述示例里头, 我们构建了一个锁对象lock, 在线程函数当中, 借由使用with lock:语句来获取锁, 在内部锁获取之前, 外部锁已被线程获取了, 这是因锁的可重入性所致, 可重入性致使同一个线程能够多次获取同一个锁, 且不会引发死锁。
各类示例呈现出锁的运用情况以及常见功能, 借助锁的使用, 能够达成对共享资源的互斥访问,以此保障多线程程序的正确性与一致性。
