threading
code: python
import threading
import time
from random import randint
class Counter:
def __init__(self):
self.count = 0
self.lock = threading.Lock()
def increment(self):
with self.lock:
current = self.count
time.sleep(0.1)
self.count = current + 1
def worker(thread_id, counter):
print(f"Thread {thread_id} starting")
for _ in range(3):
counter.increment()
time.sleep(randint(1, 3) / 10)
print(f"Thread {thread_id} finished")
def main():
counter = Counter()
threads = []
for i in range(5):
thread = threading.Thread(target=worker, args=(i, counter))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
print(f"Final counter value: {counter.count}")
if __name__ == "__main__":
main()
# Thread 0 starting
# Thread 1 starting
# Thread 2 starting
# Thread 3 starting
# Thread 4 starting
# Thread 2 finished
# Thread 1 finished
# Thread 0 finished
# Thread 4 finished
# Thread 3 finished
# Final counter value: 15