| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 361 人关注过本帖
标题:Python 多线程 锁 问题
只看楼主 加入收藏
FishK
Rank: 2
来 自:中国吉林延边
等 级:论坛游民
威 望:1
帖 子:4
专家分:10
注 册:2019-1-4
结帖率:0
  已结贴   问题点数:20  回复次数:1   
Python 多线程 锁 问题
程序代码:
import threading

VALUE = 0
gLOCK = threading.Lock()


class MyThread(threading.Thread):

    def __init__(self, loop_times):
        super().__init__()
        self.loop_times = loop_times

    def run(self):
        global VALUE
        for i in range(self.loop_times):
            gLOCK.acquire()
            VALUE += 1
            gLOCK.release()

        print(self.loop_times, self.name, VALUE)


if __name__ == '__main__':
    for i in range(2):
        MyThread(1000000).start()

我想知道为什么这样使用锁得不到期望的预期结果:
1000000 Thread-1 1000000
1000000 Thread-2 2000000
2019-01-04 10:02
eakit67
Rank: 2
等 级:论坛游民
帖 子:5
专家分:20
注 册:2019-1-7
  得分:20 
        for i in range(self.loop_times):
            gLOCK.acquire()    #当执行 VALUE += 1的时候锁住
            VALUE += 1
            gLOCK.release()    #执行完 VALUE += 1的时候解锁

你把锁放在循环中,所以两个线程是在交替进行 VALUE += 1 。

代码改成以下,就变成一个线程先执行完循环,再到另一个线程执行循环。
gLOCK.acquire()
for i in range(self.loop_times):
            VALUE += 1
gLOCK.release()
2019-01-07 22:12







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024258 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved