以下のような簡単なプログラムを取得しました。
import threading
import time
import signal
WITH_DEADLOCK = 0
lock = threading.Lock()
def interruptHandler(signo, frame):
print str(frame), 'received', signo
lock.acquire()
try:
time.sleep(3)
finally:
if WITH_DEADLOCK:
print str(frame), 'release'
lock.release()
signal.signal(signal.SIGINT, interruptHandler)
for x in xrange(60):
print time.strftime("%H:%M:%S"), 'main thread is working'
time.sleep(1)
そのため、そのプログラムを起動して Ctrl+C を 3 秒以内に 2 回押しても、デッドロックは発生しません。Ctrl + C を押すたびに適切な行が表示されます。WITH_DEADLOCK=1 を変更して Ctrl+C を 2 回 (3 秒以内に) 押すと、プログラムがハングします。
印刷操作でこのような違いが生じる理由を説明できる人はいますか?
(私のpythonバージョンは2.6.5です)