/* Lecture_1/fake_sleeptest.c * James S. Plank Continuation-Based Thread Library - A non-preemptive, continuation-based thread library. Copyright (C) 2009 James S. Plank This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Original: October, 1995 Revised: January, 2009 James S. Plank Department of Electrical Engineering and Computer Science University of Tennessee Knoxville, TN 37996 plank@cs.utk.edu */ #include #include #include "cbthread.h" double t0; typedef struct tst { int counter; int tnum; } Tst; void thread(void *arg) { Tst *t; double j; t = (Tst *) arg; if (t->counter == 5) cbthread_exit(); j = drand48(); printf("%7.4lf: Thread %d. counter = %d. Sleeping for %7.4lf seconds\n", cbthread_get_fake_time()-t0, t->tnum, t->counter, j); t->counter++; cbthread_fake_sleep(j, thread, t); } main() { int i; Tst *t; srandom(40); t0 = cbthread_get_fake_time(); for (i = 0; i < 5; i++) { t = (Tst *) malloc (sizeof(Tst)); t->tnum = i; t->counter = 0; cbthread_fork(thread, t); } cbthread_exit(); }