我不明白为什么这种线程情况不起作用 <线程锁不起作用>

特里·乔

我使用 threading.Lock() 不是同时线程访问共享资源。但是,在我的代码案例中,它不起作用。

我知道不是使用 Writer(在我的代码中),而是将这个类作为函数,然后线程锁工作并且结果为 0。但我想知道为什么我的代码不起作用。这对我来说似乎是同样的情况。

import threading

global lock
lock = threading.Lock()

class Counter:
    def __init__(self):
        self.count = 0

    def increment(self, offset):
        self.count += offset


class Writer(object):
    def __init__(self, counter: Counter):
        self.counter = counter

    def write(self, value):
        with lock:
            self.counter.increment(value)

if __name__ == "__main__":
    counter = Counter()

    def run(loop, value):
        writer = Writer(counter)
        for _ in range(loop):
            writer.write(value)

    t1 = threading.Thread(target=run, args=(100000, 1))
    t2 = threading.Thread(target=run, args=(100000, -1))

    t1.start()
    t2.start()

    print(counter.count)

我希望结果是 0。但不是 0。

科斯塔斯·查里蒂迪斯

我认为这是因为线程仍在运行。如果您尝试暂停一秒钟,则会打印 0。像这样:

import threading
import time
global lock
lock = threading.Lock()

class Counter:
    def __init__(self):
        self.count = 0

    def increment(self, offset):
        self.count += offset


class Writer(object):
    def __init__(self, counter: Counter):
        self.counter = counter

    def write(self, value):
        with lock:
            self.counter.increment(value)


if __name__ == "__main__":
    counter = Counter()

    def run(loop, value):
        writer = Writer(counter)
        for _ in range(loop):
            writer.write(value)

    t1 = threading.Thread(target=run, args=(100000, 1))
    t2 = threading.Thread(target=run, args=(100000, -1))

    t1.start()
    t2.start()
    time.sleep(1)
    print(counter.count)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我不明白为什么for循环不起作用

来自分类Dev

我不明白为什么我的.find函数不起作用

来自分类Dev

我不明白为什么我的石头,剪刀布游戏中的得分不起作用

来自分类Dev

我不明白为什么我的计算不起作用

来自分类Dev

我不明白为什么我的 Athena (Presto) SQL 查询不起作用

来自分类Dev

我不明白为什么我的代码的“再玩”药水不起作用

来自分类Dev

为什么我的线程不起作用?

来自分类Dev

我不明白为什么这个查询不起作用

来自分类Dev

全局语句不起作用,我不明白为什么

来自分类Dev

我不明白为什么这个查询不起作用

来自分类Dev

JQuery、PHP 和 mySQL 帮助。我不明白为什么这不起作用

来自分类Dev

我不明白为什么cordova 链接和Javascript 编码不起作用

来自分类Dev

Java:我不明白为什么这不起作用

来自分类Dev

我不明白为什么这个 Array 不起作用?

来自分类Dev

不明白为什么我的 php 余弦相似度代码不起作用

来自分类Dev

我不明白为什么在我的代码中使用“”会起作用,但是与“”相同的代码却不起作用

来自分类Dev

Python 的线程和多进程锁不起作用

来自分类Dev

为什么线程不起作用?

来自分类Dev

不明白为什么数字和代码不起作用

来自分类Dev

as3 hittestobject不起作用,不明白为什么

来自分类Dev

线程通知不起作用

来自分类Dev

线程同步不起作用

来自分类Dev

线程。时间不起作用

来自分类Dev

BubbleSort线程不起作用

来自分类Dev

你能帮我找出这段代码中的错误吗?我似乎不明白为什么它不起作用?

来自分类Dev

我遇到一个奇怪的问题,使用NOT IN对PostgreSQL数据库运行查询,并且不明白为什么它不起作用

来自分类Dev

我不明白为什么带options_from_collection_for_select的f.select的Ruby on Rails代码不起作用

来自分类Dev

VBA,为什么这种情况不起作用?

来自分类Dev

为什么这种情况在Ubuntu中不起作用?

Related 相关文章

  1. 1

    我不明白为什么for循环不起作用

  2. 2

    我不明白为什么我的.find函数不起作用

  3. 3

    我不明白为什么我的石头,剪刀布游戏中的得分不起作用

  4. 4

    我不明白为什么我的计算不起作用

  5. 5

    我不明白为什么我的 Athena (Presto) SQL 查询不起作用

  6. 6

    我不明白为什么我的代码的“再玩”药水不起作用

  7. 7

    为什么我的线程不起作用?

  8. 8

    我不明白为什么这个查询不起作用

  9. 9

    全局语句不起作用,我不明白为什么

  10. 10

    我不明白为什么这个查询不起作用

  11. 11

    JQuery、PHP 和 mySQL 帮助。我不明白为什么这不起作用

  12. 12

    我不明白为什么cordova 链接和Javascript 编码不起作用

  13. 13

    Java:我不明白为什么这不起作用

  14. 14

    我不明白为什么这个 Array 不起作用?

  15. 15

    不明白为什么我的 php 余弦相似度代码不起作用

  16. 16

    我不明白为什么在我的代码中使用“”会起作用,但是与“”相同的代码却不起作用

  17. 17

    Python 的线程和多进程锁不起作用

  18. 18

    为什么线程不起作用?

  19. 19

    不明白为什么数字和代码不起作用

  20. 20

    as3 hittestobject不起作用,不明白为什么

  21. 21

    线程通知不起作用

  22. 22

    线程同步不起作用

  23. 23

    线程。时间不起作用

  24. 24

    BubbleSort线程不起作用

  25. 25

    你能帮我找出这段代码中的错误吗?我似乎不明白为什么它不起作用?

  26. 26

    我遇到一个奇怪的问题,使用NOT IN对PostgreSQL数据库运行查询,并且不明白为什么它不起作用

  27. 27

    我不明白为什么带options_from_collection_for_select的f.select的Ruby on Rails代码不起作用

  28. 28

    VBA,为什么这种情况不起作用?

  29. 29

    为什么这种情况在Ubuntu中不起作用?

热门标签

归档