Can you explain this code ? from threading import Thread, Lock from datetime import datetime import time # 2 shared_resource = "" lock = Lock() # 1 modify_readers = Lock(); n_readers = 0; # 3 fifo_lock = Lock() def wait(): time.sleep(2) ### def acquire_reader(): global n_readers, modify_readers, fifo_lock fifo_lock.acquire() modify_readers.acquire() fifo_lock.release() n_readers += 1; if(n_readers == 1): lock.acquire() modify_readers.release() ### def release_reader(): global n_readers, modify_readers, fifo_lock modify_readers.acquire() n_readers -= 1; if(n_readers == 0): lock.release() modify_readers.release() ### def write_normal(): while True: global shared_resource, fifo_lock fifo_lock.acquire() lock.acquire() fifo_lock.release() print("Writing normal") shared_resource = datetime.now() lock.release() wait() ### def write_reverse(): while True: global shared_resource, fifo_lock fifo_lock.acquire() lock.acquire() fifo_lock.release() print("Writing reverse") shared_resource = str(datetime.now() )[::-1] lock.release() wait() ### def read(): while True: global shared_resource acquire_reader(); #print("Reading") print(shared_resource); release_reader(); wait() ### w1 = Thread(target=write_normal) w2 = Thread(target=write_reverse) r1 = Thread(target=read) r2 = Thread(target=read) r3 = Thread(target=read) w1.start(); w2.start(); #print("Writers running.") r1.start(); r2.start(); r3.start(); #print("Readers running.")
Can you explain this code ?
from threading import Thread, Lock
from datetime import datetime
import time
# 2
shared_resource = ""
lock = Lock()
# 1
modify_readers = Lock();
n_readers = 0;
# 3
fifo_lock = Lock()
def wait():
time.sleep(2)
###
def acquire_reader():
global n_readers, modify_readers, fifo_lock
fifo_lock.acquire()
modify_readers.acquire()
fifo_lock.release()
n_readers += 1;
if(n_readers == 1): lock.acquire()
modify_readers.release()
###
def release_reader():
global n_readers, modify_readers, fifo_lock
modify_readers.acquire()
n_readers -= 1;
if(n_readers == 0): lock.release()
modify_readers.release()
###
def write_normal():
while True:
global shared_resource, fifo_lock
fifo_lock.acquire()
lock.acquire()
fifo_lock.release()
print("Writing normal")
shared_resource = datetime.now()
lock.release()
wait()
###
def write_reverse():
while True:
global shared_resource, fifo_lock
fifo_lock.acquire()
lock.acquire()
fifo_lock.release()
print("Writing reverse")
shared_resource = str(datetime.now() )[::-1]
lock.release()
wait()
###
def read():
while True:
global shared_resource
acquire_reader();
#print("Reading")
print(shared_resource);
release_reader();
wait()
###
w1 = Thread(target=write_normal)
w2 = Thread(target=write_reverse)
r1 = Thread(target=read)
r2 = Thread(target=read)
r3 = Thread(target=read)
w1.start();
w2.start();
#print("Writers running.")
r1.start();
r2.start();
r3.start();
#print("Readers running.")
![](/static/compass_v2/shared-icons/check-mark.png)
Trending now
This is a popular solution!
Step by step
Solved in 2 steps
![Blurred answer](/static/compass_v2/solution-images/blurred-answer.jpg)
![Database System Concepts](https://www.bartleby.com/isbn_cover_images/9780078022159/9780078022159_smallCoverImage.jpg)
![Starting Out with Python (4th Edition)](https://www.bartleby.com/isbn_cover_images/9780134444321/9780134444321_smallCoverImage.gif)
![Digital Fundamentals (11th Edition)](https://www.bartleby.com/isbn_cover_images/9780132737968/9780132737968_smallCoverImage.gif)
![Database System Concepts](https://www.bartleby.com/isbn_cover_images/9780078022159/9780078022159_smallCoverImage.jpg)
![Starting Out with Python (4th Edition)](https://www.bartleby.com/isbn_cover_images/9780134444321/9780134444321_smallCoverImage.gif)
![Digital Fundamentals (11th Edition)](https://www.bartleby.com/isbn_cover_images/9780132737968/9780132737968_smallCoverImage.gif)
![C How to Program (8th Edition)](https://www.bartleby.com/isbn_cover_images/9780133976892/9780133976892_smallCoverImage.gif)
![Database Systems: Design, Implementation, & Manag…](https://www.bartleby.com/isbn_cover_images/9781337627900/9781337627900_smallCoverImage.gif)
![Programmable Logic Controllers](https://www.bartleby.com/isbn_cover_images/9780073373843/9780073373843_smallCoverImage.gif)