Я пытаюсь понять основы потоковой обработки и 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".
Запуск дает понять, что это не так. Вы получаете все приращения раскола случайных данных.
Как точно используется объект блокировки?
Изменить, Кроме того, я попытался поместить блокировки внутри функций потока, но все равно не повезло.