В следующем коде я запускаю два потока, каждый получает один и тот же счетчик в качестве параметра, и я запускаю их одновременно. Я ожидаю, что результат будет хаотическим c, но, похоже, он синхронизирован. Почему это так?
import threading
class Counter:
def __init__(self):
self.i = 0
def increment(self):
self.i += 1
def get_i(self):
return self.i
class UnsynchronizedThread(threading.Thread):
def __init__(self, counter: Counter):
super().__init__()
self.counter = counter
def run(self) -> None:
for i in range(100):
self.counter.increment()
print(f"{threading.get_ident()} - {self.counter.get_i()}")
if __name__ == '__main__':
counter1 = Counter()
thread1 = UnsynchronizedThread(counter1)
thread2 = UnsynchronizedThread(counter1)
thread1.start()
thread2.start()
И это вывод
140507778238208 - 1
140507778238208 - 2
140507778238208 - 3
140507769845504 - 4
140507769845504 - 5
140507769845504 - 6
140507769845504 - 7
140507769845504 - 8
140507769845504 - 9
140507769845504 - 10
140507769845504 - 11
...