Over several releases, the Oracle Solaris OS has evolved to a per-process mode for alarms, interval timers, and profiling.
All timers are per-process except for the real time profile interval timer, which is per_LWP. See the setitimer(2) man page for a description of the ITIMER_REALPROF timer.
The timer IDs of per-process timers are usable from any LWP. The expiration signals are generated for the process rather than directed to a specific LWP.
The per-process timers are deleted only by timer_delete()(3RT), or when the process terminates.
In the Oracle Solaris 11.1 release, the POSIX timer API was enhanced to provide a thread (LWP) directed signal. The thread directed signal notification can be requested with the use of the SIGEV_SIGNAL_THR sigevent type. You can effectively create per thread timers by using this sigevent type. See the timer_create(3C) man page for more information.
Alarms operate at the process level, not at the thread level. The alarm() function sends the signal SIGALRM to the calling process rather than the calling thread.
The profil() system call for multithreaded processes has global impact on all LWPs and threads in the process. Threads cannot use profil() for individual thread profiling. See the profil(2) man page for more information.