The programs in this directory are examples to demonstrate how to use
the omnithread class library.

1. diner       - a solution to the dining philosophers problem.
2. prodcons    - demonstrates the use of condition variables for signalling
                 between two "producer" threads and three "consumer" threads.
                 Also demonstrates the use of timed waits.
3. thrspecdata - demonstrates the use of thread-specific data by having a
                 class which inherits from omni_thread.  Also demonstrates 
                 joining with a thread which returns a value.
4. prio        - Thread priorities test. See the comments at the beginning of
                 the program source.

To Compile
----------

+ On Unix

  - Make sure that the make configuration file ../../../mk/config.mk links to
    the appropriate config file for this platform. For example:
        $ cd ../../../mk
        $ ln -s sun4_sosV_5.5.mk config.mk

  - Do 'make all' in this directory. When make finishes, the binaries are
    compiled. 

+ On NT and Windows 95

  - Make sure that the make configuration file ..\..\..\build-win32\CONFIG.win32
    is setup for your environment. Consult ..\..\..\README.win32 for details.

  - Change directory to ..\..\..\build-win32 and do
        NMAKE /F "examples_mak.win32" CFG="thread"


To Run The Programs
-------------------

- On unix, since the shared library libomnithread.so is not in the directories
  searched by the dynamic loader by default, you must add the library 
  directory to the search path. 

  On Solaris 2.5
     $ LD_LIBRARY_PATH=<absolute pathname of ../../../lib>
     $ export LD_LIBRARY_PATH

- Similarly, ensure that the DLL on NT is in a directory that is 
  searched by the system's DLL loader (see also ..\..\..\README.win32).


