NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | ATTRIBUTES | SEE ALSO
cc -mt [ flag... ] file...[ library... ] #include <thread.h>int thr_setprio(thread_t target_thread, int priority);
Thread scheduling is controlled by three attributes: its scope of contention, being either inter-process or intra-process (bound vs. unbound), (see priocntl(2) ); a relative scheduling priority; and a scheduling policy.
thr_create(NULL,NULL, thread_routine, arg, THR_BOUND, NULL);
A bound thread is bound to an LWP and its scheduling is dependent upon the scheduling of the LWP to which it is bound. LWPs compete with other LWPs in other processes, however, their scheduling may be dynamically controlled by priocntl(2) .
By default, the scope for newly-created threads are unbound, or intra-process, and their setting is NULL. An unbound thread is scheduled by libthread on an underlying LWP, which competes with other LWPs in the same process.
The following dynamic scheduling functions should be used only with unbound threads: thr_setprio() , and thr_getprio().
Priority scheduling is determined as follows:
Higher priority threads are scheduled before lower priority threads.
Solaris threads assumes that the priority is inherited across a thread create.
A Solaris thread can be created suspended and its priority can be modified.
thr_setprio() can dynamically modify an unbound thread's priority, and thr_getprio() can read an unbound thread's priority.
The scheduling policy setting is:
(system default, often time-sharing) Competing threads in this class are multiplexed according to their relative priority .
Solaris scheduling may only dynamically affect priority . There is no functionality to alter the policy of any thread; by default, a Solaris thread's schedule is equivalent to SCHED_OTHER, which is the only available Solaris policy.
thr_setprio() changes the priority of the thread, specified by target_thread , within the current process to the priority specified by priority . Currently, by default, threads are scheduled based on fixed priorities that range from zero, the least significant, to 127. The target_thread will preempt lower priority threads, and will yield to higher priority threads in their contention for LWPs, not CPUs.
The function thr_getprio() stores the current priority for the thread specified by target_thread in the location pointed to by priority . Note that thread priorities regulate access to LWPs, not CPUs, and hence are different from real-time priorities, which regulate and enforce access to CPU resources. A thread's priority set via these functions is more like a hint in terms of guaranteed access to execution resources. Programs that need access to "real" priorities should use bound threads in the real-time class (see priocntl(2) ).
If successful, the thr_getprio() and thr_setprio() return 0 . Otherwise, an error number is returned to indicate the error.
For each of the following conditions, these functions return an error number if the condition is detected.
The value specified by target_thread does not refer to an existing thread.
The thr_getprio() and thr_setprio() functions may fail if:
The value of priority makes no sense for the scheduling class associated with the target_thread.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
MT-Level | MT-Safe |
priocntl(2) , sched_setparam(3RT) , thr_create(3THR) , thr_suspend(3THR) , thr_yield(3THR) , attributes(5) , standards(5)
NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | ATTRIBUTES | SEE ALSO