Потоки 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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