PCthreads (tm) release 0.9a (beta) README file.

INSTALLATION:
-------------

   Make sure that the PTHREADS symbol is assigned to this directory.  You can do
   this in one of two ways: First, and the way I recommend, is to set the
   PTHREADS symbol in the Rules.runtime file (see the comments in that file).
   The other way is to set the PTHREADS variable as an environment variable in
   your .login, .cshrc, etc. file.

   For example, suppose you uncompressed and untarred the kit under
   /usr/local/src In this case, the PTHREADS variable should be set to
   "/usr/local/pthreads-0.9a" in either the Rules.runtime or your environment.
   It doesn't matter.

   That's it. Just type "make all" ...

       prompt> make all

   A mechanism is also provided in pthreads-0.9a to make PCthreads available
   on a system-wide basis.  To accomplish this, become root and issue make
   install.

       prompt> make install

   This will install the libraries, header files, and man pages.
   NOTE:  If you are unable to display man pages, ensure that the
   directory into which the man pages were installed are specified
   by the MANPATH environment variable.

NEW FEATURES THIS RELEASE:
-------------------------
1) Multithreaded applications built with PCthreads may now be dynamically
   configured with respect to:

       - Timer interrupt interval (from 10 milliseconds to ... )
       - Timer idle interval (from 10 milliseconds to ... )
       - Default scheduling policy
       - Default quantum.
       - Default thread stack size
       - Default thread execution priority.

   These parameters are simply specified in the initialization file,
   ".pthread_initrc".  This file behaves according to the usual precedence
   rules, i.e., the .pthread_initrc file in the startup directory takes
   precedence over one in the $HOME directory.  If neither directory contains an
   initialization file, the library uses its hardcoded defaults.  See the man
   page pthread_info

2) All man pages complete.

FIXED BUGS:
-----------
1) Fixed floating-point context-switch bug.  PCthreads was incorrectly
   restoring floating-point context under some circumstances.

KNOWN BUGS AND RESTRICTIONS:
----------------------------
1) Non-blocking sendmsg() and recvmsg() are not supported in libtbio.a because
   Linux does not yet support these services (although their system call
   counterparts are stubbed out in versions of Linux after 1.3.22).  To build the
   libtbio.a library for your system, please read the BUILD-LIBTBIO-HOWTO.

2) If an application built against PCthreads forks, all threads and data in the
   process are copied into the child.  I believe POSIX specifies that only the
   thread issuing the fork() be [re]instantiated in the child.

   I've not decided whether I want to support this feature.  At the moment, I
   do not understand the motivation and have not scheduled this behavior for
   Version 1.0.  Please feel free to help me understand the requirement for
   these semantics.  I am open minded and will implement it seems necessary.

3) Asynchronous cancellations are dangerous and I am still not sure if they
   are working properly.  If you must use async cancellation, make sure that you
   enable cancellation *only* when the target thread doesn't hold one or more
   mutexes.  If a thread is cancelled while holding a mutex PCthreads will
   attempt to unlock the mutex after all of the threads cleanup and cancellation
   handlers have completed, if possible.

4) Compiling with the PRODUCTION flags (see Rules.runtime) causes the volatile
   qualifiers in the exception handling code (libpthreads-ext.a) to be
   discarded.  This means that after a return from [sig]longjmp (and other
   non-local gotos) a variable declared as volatile can not be relied upon.

   I've tested this extensively, and so far have not ran into any problems.  But
   that doesn't mean one of you won't.  If you do, please let me know.

Reporting Bugs:
--------------
Please report all problems (and questions) via email to mtp@big.aa.net.
