/* Condition Variables Using DSS CS509 Winter 1995 G. Lindstrom */ import sim.*; import queues.*; class condition_var { String name; boolean verbose; Queue q; condition_var(String n) { this(n, false); } condition_var(String n, boolean v) { name = n; verbose = v; q = new Queue(); } void wait(resource m) { if ( verbose ) System.out.print("Time " + scheduler.clock + ": " + scheduler.current.name + " releases " + m.name + " mutex\n"); m.release(); if ( verbose ) System.out.print("Time " + scheduler.clock + ": " + scheduler.current.name + " waits for " + name + "\n"); scheduler.current.waitq(q); if ( verbose ) System.out.print("Time " + scheduler.clock + ": " + scheduler.current.name + " requests " + m.name + " mutex\n"); m.request(); if ( verbose ) System.out.print("Time " + scheduler.clock + ": " + scheduler.current.name + " receives " + m.name + " mutex\n"); } void signal() { if ( verbose ) System.out.print("Time " + scheduler.clock + ": " + scheduler.current.name + " signals " + name + "\n"); if (!q.IsEmpty()) scheduler.activate((process)q.Dequeue()); } void broadcast() { if ( verbose ) System.out.print("Time " + scheduler.clock + ": " + scheduler.current.name + " broadcasts " + name + "\n"); while (!q.IsEmpty()) scheduler.activate((process)q.Dequeue()); } }