Oracle Solaris Studio 12.2:C 用户指南

3.3.2 SUNW_MP_THR_IDLE

目前,程序的起始线程创建绑定线程。绑定线程一旦创建,将会参与执行程序的并行部分(并行循环、并行区域等),并在程序的串行部分运行时保持旋转等待状态。在程序终止之前,这些绑定线程不会休眠或停止。并行化程序在专用系统上运行时,使这些线程保持旋转等待状态通常可达到最佳性能。不过,保持旋转等待的线程会占用系统资源。

使用 SUNW_MP_THR_IDLE 环境变量控制每个线程在完成其一份并行作业后的状态。


% setenv SUNW_MP_THR_IDLE value

您可以用 spinsleep[n s|n ms] 替换 value。缺省值为 sleep,它在旋转等待 n 个单位后将线程置于休眠状态。等待单位可以是秒(s,为缺省单位)或毫秒 (ms),其中 1s 表示 1 秒;10ms 表示 10 毫秒。不带参数的 sleep 在线程完成并行任务后使线程立即进入休眠状态。sleepsleep0sleep0ssleep0ms 均等效。如果新作业在达到 n 个单位时间之前到达,线程将停止旋转等待并开始执行新作业。

另一个选项 spin 表示线程在完成一个并行任务之后应保持旋转(或忙等待)状态,直到一个新的并行任务到来为止。

如果 SUNW_MP_THR_IDLE 包含非法值或未设置,那么 spin 将用作缺省值。