#!/usr/bin/env python # FIT2022 Lab 2 example7.py import time from threading import * from fit2022io import * ev0 = Event(); ev0.set() ev1 = Event(); ev1.clear() ev2 = Event(); ev2.clear() ev3 = Event(); ev3.clear() running = 1; i = 0; di = 0; dim1 = 0; class Program(Thread): def __init__(self,label): Thread.__init__(self,name=label) self.label = label def start(self): Thread.start(self) def run(self): global running,i,di,dim1,k global ev0,ev1,ev2,ev3 while running: if self.label == "next i": ev0.wait(); ev0.clear(); i = i+1; ev1.set() elif self.label == "double i": ev1.wait(); ev1.clear(); di = 2*i; ev2.set() elif self.label == "minus 1": ev2.wait(); ev2.clear(); dim1 = di - 1; ev3.set() else: ev3.wait(); ev3.clear(); printf("i=%d, 2*i=%d, 2*i-1=%d\n",i,di,dim1) if i>=20: running = 0 ev0.set() process1 = Program("next i") process2 = Program("double i") process3 = Program("minus 1") process4 = Program("print") process1.start() process2.start() process3.start() process4.start() process1.join() process2.join() process3.join() process4.join()