多线程编程指南

每 LWP POSIX 计时器

在 Solaris 2.3 和 2.4 发行版中,timer_create(3RT) 函数返回一个包含计时器 ID 的计时器对象,该 ID 仅在调用 LWP 中有意义。到期信号将被传送到该 LWP。由于返回的计数器对象的行为,只有绑定线程可以使用 POSIX 计时器工具。

即使使用受到限制,Solaris 2.3 和 2.4 发行版中多线程应用程序的 POSIX 计时器也不可靠。这些计时器不能可靠地屏蔽生成的信号,也不能可靠地传送 sigvent 结构中的关联值。

在 Solaris 2.5 发行版中引入的应用程序可以创建每进程计时器。编译应用时定义了 _POSIX_PER_PROCESS_TIMERS 宏,或通过使用大于或等于 199506L 的值定义宏 _POSIX_C_SOURCE 来编译应用程序。

从 Solaris 9 发行版起生效,所有的计时器都针对每个进程,但虚拟时间计时器和配置文件时间间隔计时器除外,它们仍然针对每个 LWP。有关 ITIMER_VIRTUALITIMER_PROF,请参见 setitimer(2)。

每进程计时器的计时器 ID 在任何 LWP 中都可用。系统将针对进程(而非针对特定 LWP)生成到期信号。

只能通过 timer_delete(3RT) 或在进程终止时删除每进程计时器。