在这个示例中,我们使用 with lock: 语句来获取和释放锁。with 语句会确保在代码块执行完毕后自动释放锁,从而简化了代码并减少了出错的可能性。运行这个程序,你会看到 shared_resource 的最终值仍然是 200000,这表明锁成功地保护了共享资源。
import threading
import time
# 创建一个锁对象
lock = threading.Lock()
# 共享资源
shared_resource = 0
def thread_task(lock):
global shared_resource
for _ in range(100000):
# 使用 with 语句获取和释放锁
with lock:
shared_resource += 1
def main():
global shared_resource
# 重置共享资源
shared_resource = 0
# 创建两个线程
thread1 = threading.Thread(target=thread_task, args=(lock,))
thread2 = threading.Thread(target=thread_task, args=(lock,))
# 启动线程
thread1.start()
thread2.start()
# 等待线程完成
thread1.join()
thread2.join()
print(f"Final shared_resource value: {shared_resource}")
if __name__ == "__main__":
main()