``A Library Implementation of POSIX Threads under SunOS/Solaris'', Version 2.2 The PART (POSIX / Ada-Runtime Project) is happy to announce a new release of the C sources of the Pthreads library. 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, pthreads_interface.ps.Z, rtoss94.ps.Z mail-list: mueller@uzu.cs.fsu.edu Subject: subscribe-pthreads WWW: http://www.cs.fsu.edu/~mueller 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". [If your local mailer inserts an incorrect return address, send mail message with a different subject and include your correct e-mail address.] 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. A description of the interface for our Pthreads library is also available on ftp. Our implementation is limited to the Sun SPARC architecture and SunOS 4.1.x or Solaris. 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: .bug fix: Makefile comments about the use of -traditional for assembling .bug fix: pthread.h for gcc distinguish SOLARIS/SunOS 4.1x (_PARAMS) .bug fix: pthread_unlock_stack() only called in sighandler on stack overflow .bug fix: pthread_lock_stack() not called for main thread, as a side-effect, the stack of the main thread can currently not be unlocked, i.e. no signal handler can recover from stack overflow on the main thread. .bug fix: The scheduler sets mac_pthread_self() to NO_PTHREAD after freeing a TCB. The signal handler has been adjusted accordingly. (problem reported by: Nikolaus.Koenig@aaf.alcatel.at) .jmp_buf is no longer a struct but rather an array (conforms with ANSI C) .portability: There is no assmebly code left (except invoking pthread_init in some magical way) if you choose the compile options in the Makefile for maximum portability. The only problems remaining are the paths and names of include files and the initialization of Pthreads (C pragma init under Solaris, assembly routine start_float under SunOS 4.1.x) which requires OS-specific treatment. Otherwise, Pthreads should be easily portable for BSD, SVR4, or POSIX compliant UNIX systems. .document: interface document (on ftp) updated .document: The RTOSS'94 paper describes the stand-alone real-time micro-kernel for embedded application running on a VME SPARCengine 1E (see rtoss94.ps.Z on ftp site). 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), mutex priority ceilings through stack resource policy (SRP) .signals: signal handlers, synchronous and asynchronous wait for signals, masking and sending of signals, sleep, long jumps .cancellation: cleanup handlers, asynchronous, synchronous, and disabled interruptability. -from POSIX.4: .timers: nanosleep, read clock, priority scheduling bounds -from POSIX.1: .synchronous I/O for threads (I/O only blocks current thread, not process) -others: .perverted scheduling for debugging (MUT_SWITCH, RR_SWITCH, RAND_SWITCH) .stack overflow check causes signal (optional STACK_CHECK) .graceful handling of stack overflow (optional SIGNAL_STACK) .repeated inclusion of header files prevented The support is currently being extended to include: -from POSIX.4a: .mutex priority inheritance / priority ceiling emulation protocol .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 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 20msec. 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. (C)OPYRIGHT NOTICE: Copyright (C) 1992, the Florida State University Distributed by the Florida State University under the terms of the GNU Library General Public License. This file is part of Pthreads. Pthreads is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation (version 2). Pthreads is distributed "AS IS" in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with Pthreads; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. Report problems and direct all questions to: pthreads-bugs@ada.cs.fsu.edu