pythonスレッドを使用して最初のコードを書き込もうとしていました。.locked()は、pythonマルチスレッド環境でrelease()が呼び出された後でもTrueを返します。
それはロックが空くまだ言うように、[(ロックされても、リリース後にTrueを返します)()]コード 私はrelease()を使用してスレッドのロック解除の問題がありますを参照してください
import threading
import time
class thread (threading.Thread):
def __init__(self,t,d,arr,lock):
threading.Thread.__init__(self)
self.name=t
self.delay=d
self.array=arr;
self.lock=lock
def run(self):
self.fun1()
def fun1(self):
print "the thread %s want to take a lock now" %self.name
self.lock.acquire()
print "lock status just after lock acquire foe",self.name,self.lock.locked()
time.sleep(self.delay)
print "release lock for %s" %self.name
self.lock.release()
time.sleep(2)
print "lock status after lock release is",self.name,self.lock.locked()
lck=threading.Lock()
obj1=thread('T1',5,[1,2,3],lck)
obj2=thread('T2',10,[4,5,6],lck)
obj1.start()
obj2.start()
スレッドT2は、最初のロックを持って、それはそのスペースを実行:私の問題は何
OUTPUT
=====
the thread T1 want to take a lock now
the thread T2 want to take a lock now
lock status just after lock acquire foe T2 True
release lock for T2
lock status just after lock acquire foe T1 True
lock status after lock release is T2 True
release lock for T1
lock status after lock release is T1 False
。 T2のロック状態は、.locked()が「
ロック取得敵T2 True」の直後にロック状態であることがわかります。だからT2は今ロックされている。 T2がrelease()を使用してロックを解放すると、T1は期待通りにロックを取得しました。
しかし、release()を使用してT2をロック解除した後、lockedこれはまだT2のロックが利用可能であることを意味しますか?この場合、T1はどのようにロックを取得しましたか? T1が実行されrelease()の後に、私は見ることができます。ロックされた()はFalseを返します。 T1を意味するlocked()は、ロックを解除するとすぐに偽を返します。
したがって、一言で言えば、 ロック解除後も最初のスレッドT2がTrueを返すのはなぜですか? 1スレッドしか実行しないと、期待どおりに動作しません。
私の質問に完璧な説明!!!ありがとう@ForceBru – syam
@サイヤム、どうぞよろしく! – ForceBru