如果多个线程不访问同一个变量,我可以使用同一个锁吗?

问题描述 投票:0回答:1

想象我有两个线程,每个线程修改一个不同的变量。我可以将相同的锁对象传递给他们,还是应该使用两个单独的锁?一般来说,什么时候应该使用多把锁?

这是一个玩具示例:

from threading import Thread, Lock
from time import sleep


def task(lock, var):
    with lock:
        var = 1
    sleep(5)


lock = Lock()

var1 = []
var2 = []

Thread(target=task, args=(lock, var1)).start()
Thread(target=task, args=(lock, var2)).start()

还是更好

lock1 = Lock()
lock2 = Lock()

var1 = []
var2 = []

Thread(target=task, args=(lock1, var1)).start()
Thread(target=task, args=(lock2, var2)).start()
python multithreading locking
1个回答
0
投票

一次只有一个线程可以持有锁,锁用于提供对一段数据(或变量)的互斥访问。

根据您的示例,每个线程访问单独的变量,您需要两个单独的锁 - 每个变量一个。但请注意,如果只有一个线程访问变量,则不需要为其使用锁。

如果只使用一把锁,则一次只有一个线程能够执行“工作”——即使它们的工作是完全独立的。

© www.soinside.com 2019 - 2024. All rights reserved.