Solaris 10 资源管理器开发者指南

为资源控制块设置 LWP 限制

在以下示例中,应用程序设置了具有权限的限制 3000 LWP(可能没有超过)。 此外,应用程序还设置了基本限制 2000 LWP。 超过此限制时,系统会将 SIGXRES 发送到应用程序。 收到 SIGXRES 时,应用程序可能会将通知发送给其子进程,而该进程可能会减少进程使用或需要的 LWP 数目。

/* Omit return value and error checking */



#include <rctl.h>



rctlblk_t *rcb1, *rcb2;



/*

         * Resource control blocks are opaque

         * and must be explicitly allocated.

         */

rcb1 = calloc(rctlblk_size());	



rcb2 = calloc(rctlblk_size());	





/* Install an RCPRIV_PRIVILEGED, v=3000: do not allow more than 3000 LWPs */

rctlblk_set_value(rcb1, 3000);

rctlblk_set_privilege(rcb1, RCPRIV_PRIVILEGED);

rctlblk_set_local_action(rcb1, RCTL_LOCAL_DENY);

setrctl("task.max-lwps", NULL, rcb1, RCTL_INSERT);





/* Install an RCPRIV_BASIC, v=2000 to send SIGXRES when LWPs exceeds 2000 */

rctlblk_set_value(rcb2, 2000);

rctlblk_set_privilege(rcb2, RCPRIV_BASIC);

rctlblk_set_local_action(rcb2, RCTL_LOCAL_SIGNAL, SIGXRES);

setrctl("task.max-lwps", NULL, rcb2, RCTL_INSERT);