Насколько я понимаю bool является атомарным в Python, не должно быть возможности, чтобы bool был неправильно обновлен или принял мусорное значение, как, например, в C++. Только один поток будет обновлять значение bool, и оно будет меняться только с False на True (нет положения, в котором он переключится обратно на False). Поскольку проверка выполняется периодически и время не имеет решающего значения, даже если поток 1 считывает старое значение (False), в то время как поток 2 обновляет его до True, поток 1 все равно должен иметь возможность прочитать новое значение, как только поток 2 завершит обработку следующая итерация цикла.
Это неправильное понимание данной конкретной ситуации? Я понимаю, что, как правило, лучше всего использовать блокировки, и я не против добавить их, но мне интересно, будет ли это на самом деле просто создавать больше потенциальных проблем (например, взаимоблокировок), не решая при этом никаких проблем, за исключением, возможно, сохранения потока 1 от зацикливания для одного больше итераций.
Это именно тот цикл, о котором идет речь. Две переменные обновляются в другом потоке и считываются в этом. Оба значения являются логическими, начиная с False и приобретая значение True после завершения других потоков.
Код: Выделить всё
while True:
time.sleep(0.2)
if self.joined_queries:
self.stop()
break
if self.timeout:
self.stop()
break
Эта часть документации заставляет меня поверить, что это не проблема, но на самом деле это не так. уверен, правильно ли я это интерпретирую: http://www.python.org/doc/faq/library/# ... hread-safe
Подробнее здесь: https://stackoverflow.com/questions/791 ... in-a-threa
Мобильная версия