Next: , Up: Solaris-Specific Considerations


A.5.1 Solaris Threads Issues

Starting with version 3.14, GNAT under Solaris comes with a new tasking run-time library based on POSIX threads — rts-pthread. This run-time library has the advantage of being mostly shared across all POSIX-compliant thread implementations, and it also provides under Solaris 8 the PTHREAD_PRIO_INHERIT and PTHREAD_PRIO_PROTECT semantics that can be selected using the predefined pragma Locking_Policy with respectively Inheritance_Locking and Ceiling_Locking as the policy. As explained above, the native run-time library is based on the Solaris thread library (libthread) and is the default library. The FSU run-time library is based on the FSU threads. Starting with Solaris 2.5.1, when the Solaris threads library is used (this is the default), programs compiled with GNAT can automatically take advantage of and can thus execute on multiple processors. The user can alternatively specify a processor on which the program should run to emulate a single-processor system. The multiprocessor / uniprocessor choice is made by setting the environment variable GNAT_PROCESSOR to one of the following:

-2
Use the default configuration (run the program on all available processors) - this is the same as having GNAT_PROCESSOR unset
-1
Let the run-time implementation choose one processor and run the program on that processor
0 .. Last_Proc
Run the program on the specified processor. Last_Proc is equal to _SC_NPROCESSORS_CONF - 1 (where _SC_NPROCESSORS_CONF is a system variable).