线程锁的小疑问,线程锁的位置问题

为什么不是把线程锁加value+=1的位置,而是要放在for循环外,
这样的话是不是还是在同步执行,顺序修改value呢

import threading

value = 0
glock = threading.Lock() 
def add_value():
    global value
    glock.acquire()
    for x in range(100000):
        value += 1  #为啥不放在这行代码的上方和下方
    glock.release()
    print("value的值为:",value)

def main():
    for x in range(2): # 
        t1 = threading.Thread(target=add_value)
        t1.start()

if __name__ == '__main__':
    main()

3个回答

你放也没有问题。只是重复的锁定解锁效率会很低。这个过程会有一定的CPU开销。

放里边也没问题,只是逻辑上会有所不同,同时如楼上所说,这样会频繁的枷锁和解锁,效率反而会低。
但这段代码只是让你熟悉一下线程,线程锁的用法,在实际中不会这样使用的。。

放在for外面的输出结果是
value的值为:10000
value的值为:20000
放在for循环里的输出什么样都有可能

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐