From: mueller@delta.cs.fsu.edu (Frank Mueller)
Subject: POSIX threads for SPARC
Organization: Florida State University Computer Science
Date: Mon, 25 Jan 93 20:09:01 GMT

On request by Dave Emery (emery@d74sun.mitre.org), I'll post this msg here
as well.

--------------------------------------------------------------------------

``A Library Implementation of POSIX Threads under UNIX'', Version 1.15

The PART (POSIX / Ada-Runtime Project) is happy to announce that we
will be able to make the sources of a C Pthreads library available for
non-commercial use (and for limited commercial use in the future, see
paragraph before copyright).

ftp-site:  ftp.cs.fsu.edu
internet#: 128.186.121.27
directory: /pub/PART
files:     pthreads.tar.Z, pthreads_serf92.ps.Z, pthreads_usenix93.ps.Z

There is also a Pthreads mailing list distributing information about
new releases, bug patches and related issues. You can subscribe to the
mailing list by sending mail to "mueller@uzu.cs.fsu.edu" with the
subject line "subscribe-pthreads".

As part of the PART project we have been designing and implementing a
library package of preemptive threads which is compliant with POSIX
1003.4a Draft 6. Our implementation is limited to the Sun SPARC
architecture and SunOS 4.1 or later. We do not make any use of Sun's
light-weight processes to achieve better performance (with one
I/O-related exception).

What's NEW:
  .round-robin scheduling
  .faster Pthreads kernel mode
  .asynchronous I/O for threads
  .perverted scheduling for debugging (MUT_SWITCH, RR_SWITCH, RAND_SWITCH)
  .stack overflow check causes signal (optional)
  .support for attribute inheritsched and for detachstate

The following features are included in the current implementation:
-from POSIX.4a:
  .thread management: initializing, creating, joining, exiting, and
   destroying threads
  .synchronization: mutual exclusion, condition variables
  .thread-specific data
  .thread priority scheduling: priority management, preemptive
   priority scheduling (FIFO, RR)
  .signals: signal handlers, asynchronous wait, masking of signals,
   long jumps
  .cancellation: cleanup handlers, asynchronous, synchronous, and
   disabled interruptability.
-from POSIX.4:
  .timers: sleep, nanosleep, read clock
-from POSIX.1:
  .synchronous I/O for threads (I/O only blocks current thread, not process)

The support is currently being extended to include:
-from POSIX.4a:
  .mutex priority inheritance and ceilings
  .reentrant functions
  .process control: fork, wait, waitpid
   (The above functions are not supported for threads. Their semantics
    is whatever UNIX semantics for processes is. Consequently, a fork
    will fork another process with ALL threads being duplicated, not
    just the executing thread as required by POSIX.4a.
    The functions exec and _exit behave as required without any
    change, i.e. the UNIX process level semantics for these functions
    is also adequate for threads.)
-from POSIX.4:
  .asynchronous I/O for threads
  .asynchronous timer objects
-other:
  .heap memory pools
  .port to SunOS 5.1 / Solaris 2.1
  .GNU-like copyright

The current scheduling policies are strict priority scheduling
(according to POSIX.4a FIFO scheduling) which preempts when signals
are caught or round-robin (RR scheduling) which changes context to
another thread of the same priority after a time-slice of 20usec.
Besides asynchronous delivery of signals, context switches only occur
where required by the priority policy, e.g. when resources (mutexes)
are locked etc.

The current implementation has been tested and used as a base to
implement our own (new) runtime-system for an Ada compiler (Verdix).
But we do not make any claims about the completeness or correctness of
this implementation.

Unfortunately, our lawyers have not had the time to approve a GNU-like
copyright for libraries. We hope to fix this in the next release.

(C)OPYRIGHT NOTICE:
General permission to copy and distribute this code and to execute it
within a computer, without fee, is granted provided that this is not
done for commercial advantage, and that this copyright notice is
included.  All other rights are reserved.

Please let us know if you have any questions or suggestions.

Frank Mueller
mueller@alpha.cs.fsu.edu