ftp.nice.ch/Attic/openStep/implementation/gnustep/sources/alpha-snapshots/pthreads.0.9.2.README

This is the README for pthreads.0.9.2.tgz [Download] [Browse] [Up]

             *** PCthreads (tm) release 0.9.2 (beta) README file ***

INSTALLATION:

    STEP I      HOWTO INSTALL THE LIBRARIES AND HEADER FILES

        Edit the Make.defs file so that the TOPDIR variable points to the
        current directory (i.e., the directory in which this file resides).
        For example:
        
            TOPDIR  = $(HOME)/pthreads-0.9.2

        Once the Make.defs file is edited, the just type "make install" as
        illustrated below:

            prompt> make install

        This procedure does nothing more than make a set of links in the
        the pthreads-0.9.2 source tree.  If you want the pthread libraries
        available on a system wide basis, you'll have to wait until the
        final release, sometime in January.  For now, you can build
        and experiment with POSIX threads in this directory.
        
        Of course, nothing except your spirit of adventure should prevent you
        from installing these libraries and header files system-wide yourself.
        [:-)

    STEP II     HOWTO BUILD THE ANCILLARY LIBRARIES AND EXECUTABLE TESTS

        To build the libraries and executables issue the following
        commands:
        
            1)  To build A.OUT formatted libraries and executables:

                prompt> make all
            

            2)  To build ELF formatted libraries and executables:

                prompt> make ISELF="yes"

        If you want to support both A.OUT and ELF, just issue both commands
        (in no particular order).  At the conclusion you should have the
        following libraries and header files (the .so.1 libraries are
        symbolic links to appropriately versioned ELF-shared libraries):
        
            ./include
                pthread.h
                typedefs.h
                utils.h
                locks.h
                pthread_socket.h

            ./lib
                libpthreads.a           POSIX .1 threads for linux
                libpthreads.so.1

                libpthreads_dce.a       Draft 4 threads for DCE
                libpthreads_dce.so.1
                libpthreads-ext.a       Exception handling I/F for DCE
                libpthreads-ext.so.1

                liblocks.a              Library of shared and priority lock
                liblocks.so.1           services

                libsock_r.a             Thread blocking socket I/O
                libsock_r.so.1
                libc_r.a                Some thread-safe stdlib routines
                libc_r.so.1


        NOTE: I've left A.OUT as the default because most ELF systems will
        support both ELF and A.OUT formats, while A.OUT systems will not.

    STEP III    HOWTO INSTALL THE MAN PAGES

        To install the man pages, you will have to have root privileges.  Change
        to the root account (if not already) and type

            prompt> make install.man

        This step will install the libraries, header files, and man pages.
        NOTE:  The man pages are "hard-wired" to be copied into the directory
   
            /usr/local/man/man3 
        
        If this directory path doesn't exist, the installation procedure will
        fail and ask you to make this directory path.  To install these man
        pages in another directory, feel free to modify the .install_man.sh
        script.  It's dirt simple.
    
        NOTE: If your MANPATH variable doesn't include this directory, set the
        MANPATH variable in your .cshrc, .login, or .profile depending on your
        shell preference.  For example, I use the csh so in my .cshrc file I
        have

            setenv MANPATH /usr/local/man:$MANPATH

NEW FEATURES THIS RELEASE:
-------------------------
1) PCthreads now supports both A.OUT and ELF formats.  Since most ELF systems
   can accomodate A.OUT, but not vice-versa, the default format is A.OUT.

2) 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

3) 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, you must define the SENDMSG 
    constant in the makefile in ./socklib.

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 have decided to support this feature, but will not have time to complete
    pthread_atfork() until sometime after V1.0 ships.  Mayber V1.1?

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 Make.defs) 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.

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.