// $Id: prodcons.ici,v 1.0 2003/01/03 12:06:00 dada Exp $ // http://dada.perl.it/shootout // // contributed by Tim Long static n = argv[1] ? int(argv[1]) : 1; static count = 0; static consumed = 0; static produced = 0; static data = 0; static producer() { for (i := 1; i <= n; ++i) { waitfor (count == 0; "access") { data = i; count = 1; wakeup("access"); } ++produced; } return 1; } static consumer() { do { waitfor (count != 0; "access") { i = data; count = 0; wakeup("access"); } ++consumed; } while (i != n); return 1; } p := thread(producer); c := thread(consumer); waitfor (p.result; p) ; waitfor (c.result; c) ; printf("%d %d\n", produced, consumed);