Я прочитал «Программирование приложений на основе ядра Python», в котором этот код написан.Что такое Lock в Python _thread module?
import _thread
from time import sleep, ctime
loops = [4, 2]
def loop(nloop, nsec, lock):
print("start loop", nloop, "at:", ctime())
sleep(nsec)
print("loop", nloop, "done at:", ctime())
lock.release()
def main():
print("starting at:", ctime())
locks = []
nloops = range(len(loops))
for i in nloops:
lock = _thread.allocate_lock()
a = lock.acquire()
locks.append(lock)
for i in nloops:
_thread.start_new_thread(loop, (i, loops[i], locks[i]))
for i in nloops:
while locks[i].locked(): pass
print("all DONE at:", ctime())
if __name__ == "__main__":
main()
В официальном справочнике я видел, что «только один поток за один раз может приобрести замок». Замок должен гарантировать, что выполняется только один поток за раз, не так ли? Теперь у меня есть два вопроса.
- Почему может быть изготовлено более одного замка?
- Почему две нитки могут захватывать каждый замок одновременно?
Вы должны выделить только ** одну ** блокировку и должны быть получены, выпущены в функции потока. – falsetru
Пожалуйста, задавайте каждый вопрос на свой вопрос, а не вместе. –
«Блокировка должна гарантировать, что за один раз выполняется только один поток, не так ли?» Нет. Блокировка должна гарантировать, что только одному потоку, который приобрел блокировку, разрешено выполнять блок кода, завернутый этой блокировкой. – ozgur