Python threading with自动加锁解锁

本文介绍了如何使用Python的`threading.Lock`实现线程同步,通过`with`语句和显式`acquire()`/`release()`方法,确保在多线程环境下变量操作的正确性。通过对比未加锁的并发问题,展示了加锁在避免数据竞争上的重要性。
摘要由CSDN通过智能技术生成
import threading
from threading import Lock
import time

"""
使用以下加锁方式

with 锁对象:
    do something
    
和以下方式一样的效果

lock.acquire()
try:
    do something
finnaly:
    lock.release()
"""


# 此方法加锁,正常执行
def demo_one():
    time.sleep(1)
    with lock:
        global num
        num -= 1
        print("locked" + str(num))
        time.sleep(1)
    time.sleep(2)


# 此方法不加锁,100个线程会全部输出 -100
# def demo_one():
#     global num
#     time.sleep(1)
#     num -= 1
#     time.sleep(1)
#     print("locked" + str(num))


if __name__ == '__main__':
    lock = Lock()
    num = 0
    for i in range(100):
        t = threading.Thread(target=demo_one)
        t.start()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值