/*** sema.c *****************************/ /* * Copyright (C) 1998 John Haskins, Jr. */ /****************************************/ #include #include "lwt.h" #define NWORKER 4 #define NITERATIONS 25 typedef struct { sema_t sema; int wkid; } wkpkt_t; int main(void); void worker(wkpkt_t *); int main(void) { wkpkt_t * wkpacket[NWORKER]; int tid_worker[NWORKER]; int c; int tid_main=lwt_create((void *)main,0x4000,NULL); puts("main(): beginning..."); for (c=0;csema)); wkpacket[c]->wkid=c; tid_worker[c]=lwt_create(worker,0x4000,wkpacket[c]); } lwt_dispatcher(RR_TS,10); for(c=0;c<0x40;c++) { printf("main(): c=0x%02x\n",c); lwt_schedule(); } for (c=0;cwkid; printf("===\nWorker [%d]...\n===\n",id); for(n=0;nsema)); printf("worker() #%d,%2d critical section...\n",id,n); for(m=0;m<3000000;m++) ; lwt_semav(&(wkpacket->sema)); } }