, продев процесс, как в этом коде:глобальные переменные с потоками в Python
import threading
import time
def loop():
global bbcount
bbcount = 0
while True:
bbcount += 1
print "This is a Loop"
time.sleep(1)
if __name__ == '__main__':
t = threading.Thread(target=loop)
t.start()
while True:
user_input = raw_input("Please enter a value:")
print "User input: " + user_input
print "Current count: " + str(bbcount)
t.join()
ли я рискуем bbcount быть поврежден, пытаясь напечатать частично обновленный/увеличивается объем памяти в то же время увеличивается цикл ?
Я подумал об этом после прочтения: Поскольку все потоки процесса имеют одни и те же глобальные переменные, возникает проблема с синхронизацией доступа к глобальным переменным. Например, предположим, что у вас есть глобальная переменная X и два потока A и B. Предположим, что потоки A и B просто увеличивают значение X. Когда поток A начинает выполнение, он копирует значение X в регистры и увеличивает его , Прежде чем он получит возможность записать значение обратно в память, этот поток приостанавливается. Следующий поток начинается, считывает одно и то же значение X, которое считывает первый поток, увеличивает его и записывает обратно в память. Затем первый поток завершает выполнение и записывает свое значение из регистра обратно в память. После завершения этих двух потоков значение X увеличивается на 1 вместо 2, как и следовало ожидать.
от: http://www.linuxjournal.com/article/3138
Полезно знать, спасибо. –