Discuss / Python / 锁加在循环里和循环外有区别吗

锁加在循环里和循环外有区别吗

Topic source

风袭6729

#1 Created at ... [Delete] [Delete and Lock User]

老师的程序里,锁是在循环计算之内的,这样是不是每次循环都会加锁,如果放在循环外是不是不一样

# 加锁改成循环外
def run_thread(n):
    try:
        # 此处加锁
        lock.acquire()
        for i in range(100000):
            change_it(n)
    finally:
        # 改完了一定要释放锁:
        lock.release()

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

锁加哪,看你的目的

你的代码是在循环100000次结束前别人都拿不到锁,如果循环100000次要10秒,那其他拿锁线程就必须等10秒

风袭6729

#3 Created at ... [Delete] [Delete and Lock User]

大概明白了,意思是锁在循环内,加减法还是线程间交替进行的,但加法和赋值相当于绑定在一起运行的,交替进行的是两个命令,而锁在循环外的话,是整个循环计算相隔开的,一个线程循环计算100000次后,才会释放锁,然后才会线程才能拿到锁,不知道理解的对不对

风袭6729

#4 Created at ... [Delete] [Delete and Lock User]

最后那句应该是其他线程才能拿到锁

小阮72823

#5 Created at ... [Delete] [Delete and Lock User]

循环内了话,只锁一次,也就是

change_it(n)可能会交替进行,如果放在循环外就是你独享完成后,给别人,就是你要循环200000万后,才轮到别人。

  • 1

Reply