define GThreads.h

Portable threads

o GThread
Thread class.
o GCriticalSection
Mutual exclusion class.
o GEvent
Thread synchronization class.
o GCriticalSectionLock
Wrapper for mutually exclusive code.
Files "GThreads.h" and "GThreads.cpp" implement common entry points for multithreading on multiple platforms. Each execution thread is represented by an instance of class GThread. Portions of code can be protected using class GCriticalSection or class GCriticalSectionLock. Synchronization is provided by class GEvent.

The value of compiler symbol THREADMODEL selects an appropriate implementation for these classes. The current implementation supports the following values:

-DTHREADMODEL=NOTHREADS
Dummy implementation. This is a good choice when the multithreading features are not required, because it minimizes the portability problems. This is currently the default when compiling under Unix.
-DTHREADMODEL=WINTHREADS
Windows implementation. This is the default when compiling under Windows.
-DTHREADMODEL=MACTHREADS
Macintosh implementation, which is based on the MacOS cooperative model. The current implementation does not yet fully support synchronization. This is the default when compiling under MacOS.
-DTHREADMODEL=POSIXTHREADS
Posix implementation. This implementation also supports DCE threads. The behavior of the code is subject to the quality of the system implementation of Posix threads.
-DTHREADMODEL=COTHREADS
Custom cooperative threads. These custom threads do not redefine system calls. Before executing a potentially blocking system function, each thread must explicitly check whether it is going to block and yield control explicitly if this is the case. This code must be compiled with a patched version of egcs-1.1.1 http://egcs.cygnus.com. The patch addresses exception thread-safety and is provided in "@Tools/libgcc2.c.diff". Once you get the right compiler, this implementation is remarkably compact and portable. A variety of processors are supported, including mips, intel, sparc, hppa, and alpha.
-DTHREADMODEL=JRITHREADS
Java implementation hooks. Multi-threading within a Netscape plugin can be tricky. A simple idea however consists of implementing the threading primitives in Java and to access them using JRI. The classes just contain a JRIGlobalRef. This is not a real implementation since everything (Java code, native functions, stubs, exception thread safety) must be addressed by the plugin source code. Performance may be an issue.

Portability: The simultaneous use of threads and exceptions caused a lot of portability headaches under Unix. We eventually decided to implement the COTHREADS cooperative threads (because preemptive threads have more problems) and to patch EGCS in order to make exception handling COTHREAD-safe. We expect to make COTHREADs the default in future releases.

ToDo: For historical reasons, the interface is modeled after the Win32 model. This is unfortunate because more and more systems adopt the simpler monitor approach. It would be nice to change that some day.

Author:
Léon Bottou <leonb@research.att.com> -- initial implementation.
Praveen Guduru <praveen@sanskrit.lz.att.com> -- mac implementation.
Version:
$Id: GThreads.h.html,v 1.2 2000/08/26 00:09:29 bcr Exp $

Alphabetic index Hierarchy of classes