线程锁

线程锁

# coding:utf-8
import os
import threading
import time
from concurrent.futures import ThreadPoolExecutor


def work(i, lock):
    lock.acquire()
    print(i)
    time.sleep(1)
    lock.release()


if __name__ == '__main__':
    lock = threading.Lock()
    t = ThreadPoolExecutor(2)
    for i in range(20):
        t.submit(work, (i, lock))

为什么这段代码运行后什么也没有输出

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2022-07-16 16:20:39

同学,你好!因为同学的锁作为参数进行传递了,造成无法输出。课程中老师已强调线程锁只需要定义一个全局锁即可
https://img1.sycdn.imooc.com//climg/62d2748009533c6705730725.jpg
祝学习愉快~

  • 提问者 慕先生1375090 #1

    背后的原理是什么呢

    2022-07-16 17:56:35
  • 好帮手慕小猿 回复 提问者 慕先生1375090 #2

    同学,你好!线程之间资源是共享的,所以用锁来避免资源竞争,只需创建一个全局锁即可,所有线程使用这一把锁,一个线程在使用资源时,先加锁,使用完成后解锁,然后其他线程再使用。祝学习愉快~

    2022-07-16 18:30:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师