Потоки Python. Как заблокировать ветку? ⇐ Python

Программы на Python
Anonymous
Потоки Python. Как заблокировать ветку?

Сообщение Anonymous »

Я пытаюсь понять основы многопоточности и параллелизма. Мне нужен простой случай, когда два потока неоднократно пытаются получить доступ к одному общему ресурсу.
Код:

Код: Выделить всё

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 increment():
global count
lock.acquire()
try:
count += 1
finally:
lock.release()

def bye():
while True:
increment()

def hello_there():
while True:
increment()

def main():
hello = Thread(hello_there)
goodbye = Thread(bye)

while True:
print count

if __name__ == '__main__':
main()
Итак, у меня есть два потока, оба пытаются увеличить счетчик. Я думал, что если поток «A» вызовет инкремент(), будет установлена ​​блокировка, предотвращающая доступ «B» до тех пор, пока «A» не освободится.
Запуск дает понять, что это не так. Вы получаете все случайные приращения данных.
Как именно используется объект блокировки?
Кроме того, я попробовал поместить блокирует внутри функций потока, но все равно безуспешно.

Подробнее здесь: https://stackoverflow.com/questions/105 ... k-a-thread

Вернуться в «Python»