// threadtest.cc (revised)
// John H. Hine
// Simple producer/consumer example for lab exercise 1.
//----------------------------------------------------------------------
#include "copyright.h"
#include "system.h"
#include "synchlist.h"
//----------------------------------------------------------------------
// Producer/Consumer
// List q is global and shared between producer and consumer
// threads.
// Threads
// Loop 5 times, inserting/removing an item into/from the list
// and yielding the CPU to another ready thread each iteration.
//----------------------------------------------------------------------
SynchList *q;
void Producer(int which)
{
int num;
for (num = 0; num < 5; num++) {
int *n = new int;
*n = num;
q->Append(n);
printf("*** Producer appended %d to list\n", *n);
currentThread->Yield();
}
}
void Consumer(int which)
{
int num;
int *n;
for (num = 0; num < 5; num++) {
n=(int *)q->Remove();
printf("*** Consumer removed %d from list\n", *n);
currentThread->Yield();
}
}
//----------------------------------------------------------------------
// ThreadTest
// Set up a ping-pong between two threads, by forking a thread
// to call Consumer, and then calling Producer using this main thread.
//----------------------------------------------------------------------
void ThreadTest()
{
DEBUG('t', "Entering Producer/Consumer\n");
q = new SynchList();
Thread *t = new Thread("Consumer");
t->Fork(Consumer,0);
Producer(1);
}