Lock vs Rlock in Python

Master Python with 70+ Hands-on Projects and Get Job-ready - Learn Python

Program 1

# Difference between Lock and RLock
import time
from threading import *
# l=RLock()
# def printTable(n): 
#     l.acquire()
#     l.acquire()
#     for i in range(1,11):
#         print(n*i)
#         time.sleep(1)
#     l.release()
#     l.release()

# # def display(n):
# #     l=Lock()
# #     l.acquire()
# #     printTable(n)
# #     l.release()

# #Calling (Main Thread)
# T1=Thread(target=printTable,args=(5,),name="First")
# T2=Thread(target=printTable,args=(8,),name="Second")
# T1.start()
# T2.start()
# T1.join()
# T2.join()
  # Object Oriented Code (Has A Relation)
# l=RLock()    
# class MyTable:
#    def printTable(self,n): 
#     l.acquire()
#     l.acquire()
#     for i in range(1,11):
#         print(n*i)
#         time.sleep(1)
#     l.release()
#     l.release()
#  #Main Thread    
# MT=MyTable()
# T1=Thread(target=MT.printTable,args=(5,),name="First")
# T2=Thread(target=MT.printTable,args=(8,),name="Second")
# T1.start()
# T2.start()
# T1.join()
# T2.join()

# Object Oriented Code (is A Relation)
l=RLock()
class MyTable:
   def printTable(self,n): 
    l.acquire()
    l.acquire()
    for i in range(1,11):
        print(n*i)
        time.sleep(1)
    l.release()
    l.release() 
class MyThread1(Thread):
   
   def run(self):
      M=MyTable()
      M.printTable(5)

class MyThread2(Thread):
   def run(self):
      M=MyTable()
      M.printTable(10)

#Main Thread
M1=MyThread1()
M2=MyThread2()
M1.start()
M2.start()

M1.join()
M2.join()

Program 2

# Semaphore in python
import time
from threading import *
s=Semaphore(3)
def display(n):
    s.acquire()
    for i in range(1,n+1):
        print(current_thread().getName(), i)
        time.sleep(1)
    s.release()

#Main Thread
T1=Thread(target=display,args=(3,),name="one")
T2=Thread(target=display,args=(10,),name="two")
T3=Thread(target=display,args=(7,),name="three")
T4=Thread(target=display,args=(10,),name="four")
T5=Thread(target=display,args=(13,),name="five")
T6=Thread(target=display,args=(15,),name="six")
T1.start()
T2.start()
T3.start()
T4.start()
T5.start()
T6.start()

T1.join()
T2.join()
T3.join()
T4.join()
T5.join()
T6.join()

 

If you are Happy with DataFlair, do not forget to make us happy with your positive feedback on Google

courses

DataFlair Team

DataFlair Team provides high-impact content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. We make complex concepts easy to grasp, helping learners of all levels succeed in their tech careers.

Leave a Reply

Your email address will not be published. Required fields are marked *