static void TestProbe() /* Process 0 sleeps for 20 seconds and then sends each process a message. The other processes sleep for periods of 2 seconds and probes until it gets a message. All processes respond to process 0 which recieves using a wildcard probe. */ { long type_syn = 32; long type_msg = 33; long type_ack = 34; long me = NODEID_(); char buf; long lenbuf = sizeof buf; long sync = 1; if (me == 0) { (void) printf("Probe test ... processes should sleep for 20s only\n"); (void) printf("----------\n\n"); (void) fflush(stdout); } SYNCH_(&type_syn); if (me == 0) { long nproc = NNODES_(); long anyone = -1; long ngot = 0; long node; (void) sleep((unsigned) 20); for (node=1; node<nproc; node++) { SND_(&type_msg, &buf, &lenbuf, &node, &sync); (void) printf(" Sent message to %ld\n", (long)node); (void) fflush(stdout); } while (ngot < (nproc-1)) if (PROBE_(&type_ack, &anyone)) { RCV_(&type_ack, &buf, &lenbuf, &lenbuf, &anyone, &node, &sync); (void) printf(" Got response from %ld\n", (long)node); (void) fflush(stdout); ngot++; } } else { long node = 0; while (!PROBE_(&type_msg, &node)) { (void) printf(" Node %ld sleeping\n", (long)me); (void) fflush(stdout); (void) sleep((unsigned) 2); } RCV_(&type_msg, &buf, &lenbuf, &lenbuf, &node, &node, &sync); SND_(&type_ack, &buf, &lenbuf, &node, &sync); } SYNCH_(&type_syn); }
long tcg_probe(long type, long node) { long atype = type; long anode = node; return PROBE_(&atype, &anode); }
long tcg_probe(long type, long node) { Integer atype = type; Integer anode = node; return PROBE_(&atype, &anode); }