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.")

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question

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.")

Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 2 steps

Blurred answer
Knowledge Booster
Race Condition
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education