【问题标题】:Is there any way to lock and unlock while dealing with multiple threads, without using inbuilt methods?在不使用内置方法的情况下,有没有办法在处理多个线程时锁定和解锁?
【发布时间】:2020-09-16 03:19:01
【问题描述】:
import threading
x = 0
def test(lock):
    global x
    for i in range(10):
        lock.acquire()
        print(threading.current_thread())
        x+= 1
        lock.release()



def mt():
    lock = threading.Lock()
    t1 = threading.Thread(target=test , args=(lock,))
    t2 = threading.Thread(target = test , args=(lock,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()

mt()
print(x)

我正在尝试在 python 中学习多线程。我使用 python 内置方法来锁定和解锁任何进程。 我可以在没有任何内置函数的情况下执行此操作吗?

【问题讨论】:

  • 两种方式: 1.使用3rd锁,如redis锁; 2. 使用线程安全逻辑,特别是避免使用全局变量。
  • 嘿,我对这个概念很陌生。你能扩大你的答案吗?
  • 这是一个很大的话题,初学者很难解释清楚。所以,首先你应该用谷歌搜索什么是“线程安全”,然后你可以问一个更好的问题。
  • 你能给我一些代码吗?有点急。

标签: python multithreading synchronization thread-safety python-multithreading


【解决方案1】:

有可能吗?是的。

你想知道怎么做?这可能是一个书本级别的话题。内置方法调用操作系统来进行锁定和解锁,详细信息将取决于 Python 解释器在哪个操作系统上运行。操作系统将使用专门的硬件指令,而那些的细节将取决于操作系统是为哪个硬件平台构建的。

如果您想编写自己的代码来做同样的事情,它不会是 Python 代码:您必须编写 Python extension。我自己从来没有做过,所以我不能再告诉你了。

如果您想了解更多关于锁定的一般工作原理,这本书可能会有所帮助:https://www.amazon.com/Art-Multiprocessor-Programming-Revised-Reprint/dp/0123973376/

如果您想了解有关任何特定操作系统或任何特定硬件平台的更多信息,则必须查阅相应的参考手册。

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多