shared_memory = [-1] * SIZE は、[-1, -1, -1, -1, -1] になり、producerで[0, 1, 2, 3, 4]に変わる。ここがややこしい。
import time
from threading import Thread, current_thread
SIZE = 5
shared_memory = [-1] * SIZE
class Producer(Thread):
def run(self) -> None:
self.name = "Producer"
global shared_memory
for i in range(SIZE):
print(f"{current_thread().name}: Writing {int(i)}")
shared_memory[i - 1] = i
class Consumer(Thread):
def run(self) -> None:
self.name = "Consumer"
global shared_memory
for i in range(SIZE):
while True:
line = shared_memory[i]
if line == -1:
print(f"{current_thread().name}: Data not available\n"
f"Sleeping for 1 second before retrying")
time.sleep(1)
continue
print(f"{current_thread().name}: Read: {int(line)}")
break
def main() -> None:
threads = [
Consumer(),
Producer(),
]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
if __name__ == "__main__":
main()