无论多线程程序是使用库调用还是使用 OpenMP 或其它并行编译器指令实现的,它们均会调用线程库 libthread.so。在 SolarisTM 8 操作环境中,线程库 libthread.so 有两种变体。缺省线程库在本质上与 Solaris 7 操作环境中的缺省线程库相同。位于 /usr/lib/lwp 中的替代线程库与 Solaris 9 操作环境中的线程库具有相同的行为。
Solaris 8 操作环境中的这两个线程库具有不同的行为。缺省线程库会创建额外线程来执行信号处理及其它任务。如果使用了已绑定的线程,会为这些额外线程创建额外的 LWP。不会为这些线程收集性能数据,这些线程大部分时间处于休眠状态。但是,在这些线程中花费的时间会包括在进程统计数据中和抽样数据内记录的时间中。此外,应显示为“用户锁定”时间的时钟数据在性能分析器中显示为“其它等待”时间。替代线程库不会创建这些额外线程,它始终将线程绑定到 LWP,并且会正确地为“用户锁定”时间累积时钟数据。使用替代线程库通常能最终得到更好的程序性能和更好的性能数据。可以在链接程序时显式选择替代线程库,也可以将库路径添加到 LD_LIBRARY_PATH 环境变量中,以便在运行程序时使用它。
编译器会在 OpenMP 程序中插入对微任务化库 libmtsk.a 的调用,从而实现程序的并行执行。该库将会管理线程的创建,这些线程在缺省情况下为绑定线程。工作线程在等待工作时将时间花费在忙等待上,忙等待在性能分析器中显示为“用户 CPU”时间。可以设置环境变量 SUNW_MP_THR_IDLE 来指定休眠等待,休眠等待在性能分析器中显示为“其它等待”时间。有关详细信息,参见《Forte Developer 7 OpenMP API 用户指南》。