Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Example of a data race in Python
# Does Python have data races?
#
# As we've seen, Java can have data races, according to
# https://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html
# It says an example of a data race is when:
# - there is a write in one thread,
# - a read of the same variable by another thread,
# - and the write and read are not ordered by synchronization.
#
# This program attempts to cause a data race in Python.
from threading import Thread
from time import sleep
counter = 0
def increase():
global counter
for i in range(0, 100000):
counter = counter + 1
threads = []
for i in range(0, 400):
threads.append(Thread(target=increase))
for thread in threads:
thread.start()
for thread in threads:
thread.join()
print(f'Final counter: {counter}')
# A few trials from my computer (Mac, 2.6 GHz 6-Core i7):
# Final counter: 31735072
# Final counter: 32829326
# Final counter: 31496003
#
# We conclude that yes, Python has data races.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment