Let us implement a bounded FIFO buffer in C-Linda. There are a number of producers and a number of consumer. Assume that the functions consume and produce have already been defined. Now consider the functions consumer and producer.
void consumer()
{
int data;
while (1)
{
data = get();
consume(data);
}
}
void producer()
{
int data;
while (1)
{
data = produce();
put(data);
}
}
The functions get and put can be defined as follows.
int get()
{
int data;
int index;
in("head", ?index);
in("full", index, ?data);
out("head", ++index);
out("empty");
return data;
}
void put(int data)
{
int index;
in("empty");
in("tail", ?index);
out("full", index, data);
out("tail", ++index);
}
A number of consumers and producers can be created as follows.
#define CONSUMER 10
#define PRODUCER 5
#define CAPACITY 25
void real_main()
{
for (int i = 0; i < CAPACITY)
{
out("empty");
}
out("head", 0);
out("tail", 0);
for (int i = 0; i < CONSUMER; i++)
{
eval("consumer", consumer());
}
for (int i = 0; i < PRODUCER; i++)
{
eval("producer", producer());
}
}