Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from random import shuffle, randint
- import threading
- from time import sleep
- size = 1000
- resource = [0 for _ in range(size)]
- mutexes = [threading.Lock() for _ in range(size)]
- reader_mutex = [threading.Lock() for _ in range(size)]
- reader_amount = [0 for _ in range(size)]
- def reader():
- while True:
- index = randint(0, size-1)
- with reader_mutex[index]:
- reader_amount[index] += 1
- if reader_amount[index] == 1:
- mutexes[index].acquire()
- print(f'Read value {resource[index]}')
- with reader_mutex[index]:
- reader_amount[index] -= 1
- if reader_amount[index] == 0:
- mutexes[index].release()
- sleep(2)
- def writer():
- while True:
- index = randint(0, size-1)
- mutexes[index].acquire()
- value = randint(0, 100)
- resource[index] = value
- print(f'Write value {value}')
- mutexes[index].release()
- sleep(2)
- def main():
- threads = [threading.Thread(target=reader) for _ in range(
- 4)] + [threading.Thread(target=writer) for _ in range(4)]
- shuffle(threads)
- for thread in threads:
- thread.start()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement