/ / Какво е нуждата от threading.Lock (), когато Cpython има GIL? - python, multithreading, python-multithreading, cpython, gil

Какво е нуждата от threading.Lock (), когато Cpython има GIL? - python, multithreading, python-multithreading, cpton, gil

Учих езика на питън. Аз нямам добро разбиране на нишките и не мога да мисля за ситуация, когато ще ви е нужно threading.Lock (), тъй като CPYthon "и GIL само позволява една нишка да изпълни в даден момент, така че аз мисля, че една критична секция не може да бъде достъпни от две нишки едновременно.

Отговори:

2 за отговор № 1

GIL гарантира, че е един единствен процесизпълнени по всяко време. Въпреки това, когато използвате нишки, може да имате файлове или други обекти, споделени между нишките. Дори ако само една нишка е активна във всеки един момент (поради GIL), множество нишки могат да имат достъп до един и същ обект, тук е, когато заключващите се играят. Използвайки Threading.Lock () избягва достъпа на даден обект до втора нишка, докато първата нишка вече го използва.

Да кажем, че имате файл и искате да имате две нишкинапишете същия файл. GIL гарантира, че само една WRITE операция се изпълнява в даден момент, Lock ще гарантира, че само една нишка може да напише този файл.