Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python锁如何知道要锁定哪个资源或对象?(理论)_Python_Multithreading_Thread Safety_Locking - Fatal编程技术网

python锁如何知道要锁定哪个资源或对象?(理论)

python锁如何知道要锁定哪个资源或对象?(理论),python,multithreading,thread-safety,locking,Python,Multithreading,Thread Safety,Locking,我只是想说清楚,我没有一个具体的例子,因为使用 到目前为止,各种建议实现的“how to”都适合我的需要,我没有遇到任何关于锁的问题,但是在python中使用锁确实提出了以下问题 调用lock.acquire()似乎不需要指定要锁定的资源,这让我想知道python锁如何知道要锁定的对象或资源 import time import thread def myfunction(string,sleeptime,lock,*args): while 1: #entering crit

我只是想说清楚,我没有一个具体的例子,因为使用 到目前为止,各种建议实现的“how to”都适合我的需要,我没有遇到任何关于锁的问题,但是在python中使用锁确实提出了以下问题

调用lock.acquire()似乎不需要指定要锁定的资源,这让我想知道python锁如何知道要锁定的对象或资源

import time import thread


def myfunction(string,sleeptime,lock,*args):
    while 1:    #entering critical section
        lock.acquire() 
        print string," Now Sleeping after Lock acquired for ",sleeptime
        time.sleep(sleeptime) 
        print string," Now releasing lock and then sleeping again"
        lock.release()  #exiting critical section
        time.sleep(sleeptime) # why?


lock=thread.allocate_lock()
thread.start_new_thread(myfunction,("Thread No:1",2,lock))
thread.start_new_thread(myfunction,("Thread No:2",2,lock))

它的合作锁定。锁只在程序中的所有代码都同意在使用资源之前获得锁的情况下对资源起作用。

AFAIK,锁只锁定自身。它们不会,他们只是防止自己再次被
acquire
d,直到
release
d。@martineau OP发布了一个非常相关的问题,我看过的Python锁定/线程页面似乎都没有涉及到这一点。你的评论帮助我更好地理解了这个概念。人们应该理解,Python中的锁并不是真正地锁定资源,而是锁定代码的一部分,并且在完成之前不允许任何其他人执行它。这样,您就有了一个可以应用于任意数量的资源、函数等的锁。@Pedro:很高兴听到这个消息。锁也被称为互斥(mutex,mutualexclusion)对象,因为它们允许多个线程通过阻止同时执行访问共享资源的代码来同步访问共享资源。