Producer-consumer example using the EiffelThread library.
---------------------------------------------------------

A proposition of Eiffel code for implementing
the famous Producer-Consumer example.

Works with Eiffel 4.2 and higher.

Implementation notes
--------------------

Condition variables are used to synchronize consumers and
producers access to the shared buffer.
A mutex synchronized the output.

Implementation notes specific to Eiffel
---------------------------------------

We can only share flat object (no reference in it). However,
the shared buffer contains an attribute data:ARRAY[INTEGER].
If we do not freeze it, the Eiffel GC will collect it.

We use a proxy[BOOLEAN_REF] as a flag for exiting the program.
It is does not work with a simple boolean (no expanded type can be
put into a proxy). 
 
Compilation
-----------
Assertions should not be turned on with any version of the eiffel compiler
anterior to 4.3. Assertions are only MT-safe since the 4.3 release.

