Advertisement
frolkin28

Readers_writers_problem

Mar 20th, 2020
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.26 KB | None | 0 0
  1. from random import shuffle, randint
  2. import threading
  3. from time import sleep
  4.  
  5. size = 1000
  6. resource = [0 for _ in range(size)]
  7.  
  8. mutexes = [threading.Lock() for _ in range(size)]
  9. reader_mutex = [threading.Lock() for _ in range(size)]
  10. reader_amount = [0 for _ in range(size)]
  11.  
  12.  
  13. def reader():
  14.  
  15.     while True:
  16.         index = randint(0, size-1)
  17.         with reader_mutex[index]:
  18.             reader_amount[index] += 1
  19.  
  20.             if reader_amount[index] == 1:
  21.                 mutexes[index].acquire()
  22.  
  23.             print(f'Read value {resource[index]}')
  24.  
  25.         with reader_mutex[index]:
  26.             reader_amount[index] -= 1
  27.             if reader_amount[index] == 0:
  28.                 mutexes[index].release()
  29.         sleep(2)
  30.  
  31.  
  32. def writer():
  33.  
  34.     while True:
  35.         index = randint(0, size-1)
  36.  
  37.         mutexes[index].acquire()
  38.         value = randint(0, 100)
  39.         resource[index] = value
  40.         print(f'Write value {value}')
  41.  
  42.         mutexes[index].release()
  43.         sleep(2)
  44.  
  45.  
  46. def main():
  47.     threads = [threading.Thread(target=reader) for _ in range(
  48.         4)] + [threading.Thread(target=writer) for _ in range(4)]
  49.     shuffle(threads)
  50.    
  51.     for thread in threads:
  52.         thread.start()
  53.  
  54.  
  55. if __name__ == '__main__':
  56.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement