Ansh Jain
Ansh Jain

Reputation: 23

Python locking threads not working in an example

I am trying to grasp the Lock in multithreading module in python. But for some reason it is not locking the objects and lets the next thread run without waiting for the lock to release.

Here is the code:

from threading import Thread, Lock
import time

database_value = 0


def increase(lock):
    global database_value
    lock.acquire()

    local_copy = database_value
    local_copy += 1
    time.sleep(0.1)

    database_value = local_copy
    lock.release()
    




if __name__ == '__main__':

    lock = Lock()
    print('start value',database_value)

    thread1 = Thread(target =increase, args = (lock,))
    thread2 = Thread(target =increase, args = (lock,))
    
    print('start')
    #start
    thread1.start()
    thread2.start()

    #join 
    print('join')
    thread1.join()
    thread1.join()

    print('end value', database_value)

The Output I am expecting is:

start value 0
start
join
end value 2

But the Output I get:

start value 0
start
join
end value 1

Upvotes: 2

Views: 51

Answers (1)

ErdoganOnal
ErdoganOnal

Reputation: 880

At the join step, you wait for thread1 instead of thread2.

#join 
    print('join')
    thread1.join()
    thread1.join() # Should be thread2

If you change it below, it will work.

#join 
    print('join')
    thread1.join()
    thread2.join()

Upvotes: 1

Related Questions