首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法创建竞争条件,我的代码是按顺序运行的吗?

无法创建竞争条件,我的代码是按顺序运行的吗?
EN

Stack Overflow用户
提问于 2018-06-18 22:45:12
回答 1查看 132关注 0票数 0

我试着用下面的代码在Python语言中演示一个竞态条件,但总是得到期望值0。是不是我的代码出了什么问题,只是它不够“密集”,不足以触发竞态条件?谢谢。

代码语言:javascript
复制
import threading
import time


def race_cond():
    foo = 0
    flag = threading.Event()

    def mutator():
        flag.wait()
        nonlocal foo
        foo += 1
        foo -= 1
        foo += 1

    ts = [threading.Thread(target=mutator)
         for i in range(10000)]
    [t.start() for t in ts]
    flag.set()
    [t.join() for t in ts]
    return foo

for i in range(100):
    print(f'Expecting 10000, actual: {race_cond()}')
EN

回答 1

Stack Overflow用户

发布于 2018-06-18 22:50:52

mutator()不会改变任何东西;实际上,它会抛出一个错误,因为您正在尝试更改一个没有在该函数中定义的局部变量。为了更改foo,您需要在函数中使用global foo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50912070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档