Python – 多线程 – Lock必须是全局的吗?

我是python中多线程的初学者.
我想在线程中使用Lock.是否必须在线程中声明为全局?
我的代码看起来像这样:

i = 0
lock = threading.RLock()
def do_work():
  global i
  # global lock ?????????????
  while i < len(my_list):
    lock.acquire()
    my_i = i
    i += 1
    lock.release()
    my_list[my_i].some_works()

workers = [threading.Thread(target=do_work) for _ in range(8)]
for worker in workers:
  worker.start()

解决方法:

要回答你的直接问题,线程不必使用全局来知道锁变量是什么. Here is more information on scope in Python

不幸的是,“正确使用”的答案取决于您的应用/情况.只要您的锁实际上是应用程序的全局锁定,您所做的事情就没有任何内在错误.如果您的锁不是您的应用程序的全局锁,或者您想要破坏您的应用程序,您可以通过创建自己的线程对象来实现. Here is a great tutorial on using threads/locks.

祝好运!

上一篇:c# – 如何多线程“跨层”具有相关ID的单例而不锁定?


下一篇:MySQL锁定重复键错误