threading
David Raymond
David.Raymond at tomtom.com
Wed Dec 4 10:47:57 EST 2019
100 increments happen very fast, and means each thread will probably complete before the main thread has even started the next one. Bump that up to 1_000_000 or so and you'll probably trigger it.
I did a test with a print(x) at the start of test() to see what the number was when each thread kicked off, and the very first thread had got it up to 655,562 by the time the second thread had started and gotten to that print statement.
-----Original Message-----
From: Python-list <python-list-bounces+david.raymond=tomtom.com at python.org> On Behalf Of ast
Sent: Wednesday, December 4, 2019 10:18 AM
To: python-list at python.org
Subject: threading
Hi
An operation like x+=1 on a global variable x is not thread safe because
there can be a thread switch between reading and writing to x.
The correct way is to use a lock
lock = threading.Lock
with lock:
x+=1
I tried to write a program without the lock which should fail.
Here it is:
import threading
x = 0
def test():
global x
for i in range(100):
x+=1
threadings = []
for i in range(100):
t = threading.Thread(target=test)
threadings.append(t)
t.start()
for t in threadings:
t.join()
print(x)
10000
The result is always correct: 10000
Why ?
Secondly, how the switch between threads is done by the processor ? Is
there a hardware interrupt coming from a timer ?
--
https://mail.python.org/mailman/listinfo/python-list
More information about the Python-list
mailing list