/* Private Class Row implements one row of the database table */ /* (i.e. one bill) */ class Row { // monitor private boolean row_lock; // lock of record (false - free rec.) private int key; // key of record private int value; // value of account Row (int par_key, int par_value) { row_lock = false; key = par_key; value = par_value; } Row () { row_lock = false;} void set_row (int par_key, int par_value) { row_lock = false; key = par_key; value = par_value; } int get_value () {return value;} int get_key () {return key;} synchronized boolean test_and_set_lock () { boolean old_lock = row_lock; row_lock = true; return old_lock; } void release_lock () {row_lock = false;} void add (int income) {value += income;} boolean sub (int outcome) { if (outcome <= value) { value -= outcome; return true; } else return false; } synchronized void print_row() { System.out.println(row_lock + " " + key + " " + value); } } /* Public class Table implements an array of bills */ public class Table { // monitor private int[] state; // 0 - running trns., 1 - done trns. // 2 - aborted trns. private int n; // num. of rows private Row[] vector; // array of rows public Table (int par_n, int ini_value) { n = par_n; vector = new Row[n]; for (int i = 0; i