Я пытаюсь понять основы потоковой обработки и concurrency. Я хочу простой случай, когда два потока многократно пытаются получить доступ к одному совместно используемому ресурсу.
Код:
import threading
class Thread(threading.Thread):
def __init__(self, t, *args):
threading.Thread.__init__(self, target=t, args=args)
self.start()
count = 0
lock = threading.Lock()
def incre():
global count
lock.acquire()
try:
count += 1
finally:
lock.release()
def bye():
while True:
incre()
def hello_there():
while True:
incre()
def main():
hello = Thread(hello_there)
goodbye = Thread(bye)
while True:
print count
if __name__ == '__main__':
main()
Итак, у меня есть два потока, оба пытающихся увеличить счетчик. Я думал, что если поток "A", называемый incre()
, будет установлен lock
, предотвращая доступ "B" до "A".
Запуск дает понять, что это не так. Вы получаете все приращения раскола случайных данных.
Как точно используется объект блокировки?
Изменить, Кроме того, я попытался поместить блокировки внутри функций потока, но все равно не повезло.