鱼C论坛

 找回密码
 立即注册
查看: 1855|回复: 1

[已解决]多线程锁的问题,怎么总是锁不住呢

[复制链接]
发表于 2021-5-5 20:36:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def c(j):
        global lock
        lock = threading.Lock()
        if lock.locked()!=1:#如果没有锁定
                lock.acquire()#加锁
                for i in range(30):
                        print("{}执行看看效果{}".format(j,i))
                if lock.locked()==1:#如果已经加锁了,这里解锁
                    lock.release()

tt1 = threading.Thread(target=c, args=(1,))
tt1.start()
tt2 = threading.Thread(target=c, args=('...........',))
tt2.start()
tt3 = threading.Thread(target=c, args=('aaaaaaaaaaaaa',))
tt3.start()

我进循环就先判断是否有锁,没有就加锁,然后执行完循环后解锁,再给另一个线程使用,为啥实际输出结果和没有加锁的效果完全一样呢?我看了下锁定的状态,用print(lock)看到在加锁前就有3个线程进来,而加锁后也是有3个线程都在for循环里,我到底是哪里做的不对呢
最佳答案
2021-5-5 21:23:45
本帖最后由 suchocolate 于 2021-5-5 21:28 编辑

锁是全局对象,正常不需要检测有没有锁。你的代码里的锁是函数里临时创建的私锁,没有效果。
别的书里的案例,供参考:
from threading import Thread, Lock
import time

n = 100   # 全局变量,多个进程一起修改它。

def task():
    global n
    mutex.acquire()    # 给公锁上锁
    temp = n
    time.sleep(0.1)
    n = temp - 1
    print('购买成功,剩余%d张电影票' % n)
    mutex.release()


if __name__ == '__main__':
    mutex = Lock()    # 创建公共锁对象
    t_l = []
    for i in range(10):
        t = Thread(target=task)
        t_l.append(t)
        t.start()
    for t in t_l:
        t.join()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-5 21:23:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2021-5-5 21:28 编辑

锁是全局对象,正常不需要检测有没有锁。你的代码里的锁是函数里临时创建的私锁,没有效果。
别的书里的案例,供参考:
from threading import Thread, Lock
import time

n = 100   # 全局变量,多个进程一起修改它。

def task():
    global n
    mutex.acquire()    # 给公锁上锁
    temp = n
    time.sleep(0.1)
    n = temp - 1
    print('购买成功,剩余%d张电影票' % n)
    mutex.release()


if __name__ == '__main__':
    mutex = Lock()    # 创建公共锁对象
    t_l = []
    for i in range(10):
        t = Thread(target=task)
        t_l.append(t)
        t.start()
    for t in t_l:
        t.join()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 01:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表