当前位置:早雪网网络学院编程文档C/C++ → Solaris2.4 多线程编程指南2--用多线程编程

Solaris2.4 多线程编程指南2--用多线程编程

减小字体 增大字体 作者:不详  来源:supcode.com收集整理  发布时间:2005-7-22 19:39:44
不做调整,也不涉及内核。线程的系统优先级的形式是唯一的,在创建进程时继 承而来。

2.1.14.1 Thr_getprio(3T)

用thr_getprio()来得到线程当前的优先级。
#include
int thr_getprio(thread_t target_thread,int *pri)
每个线程从它的创建者那里继承优先级,thr_getprio把target_thread当前 的优先级保存到由pri指向的地址内。
返回值--thr_getprio()在正常执行后返回0,其他值意味着错误。在以下情 况发生时,函数失败并返回相关值。
ESRCH target_thread在当前进程中不存在。

2.1.14.2 Thr_setprio(3T)

用thr_setprio()来改变线程的优先级。
#include
int thr_setprio(thread_t target_thread,int pri)

thr_setprio改变用target_thread指定的线程的优先级为pri。缺省状态下, 线程的调度是按照固定的优先级--从0到最大的整数--来进行的,即使不全由优先 级决定,它也占有非常重要的地位。Target_thread将打断低优先级的线程,而让 位给高优先级的线程。
返回值--thr_setprio()在正常执行后返回0,其他值意味着错误。在以下情况发生时,函数失败并返回相关值。
ESRCH target_thread在当前进程中找不到。
EINVAL pri的值对于和target_thread相关的调度等级来说没有意义。

2.1.15线程调度和线程库函数

下面的libthread函数影响线程调度

2.1.15.1 thr_setprio()和thr_getprio()
这两个函数用来改变和检索target_thread的优先级,这个优先级在用户级线程库调度线程时被引用,但与操作系统调度LWP的优先级无关。
这个优先级影响线程和LWP的结合--如果可运行的线程比LWP多的时候,高优 先级的线程得到LWP。线程的调度是"专横"的,就是说,如果有一个高优先级的线 程得不到空闲的LWP,而一个低优先级的线程占有一个LWP,则低优先级的线程被 迫将LWP让给高优先级的线程。

2.1.15.2 thr_suspend()和thr_continue()
这两个函数控制线程是否被允许运行。调用thr_suspend(),可以把线程设置 为挂起状态。就是说,该线程被搁置,即使有可用的LWP。在其他线程以该线程为 参数调用thr_continue后,线程退出挂起状态。这两个函数应当小心使用--它们 的结果也许是危险的。例如,被挂起的线程也许是处在互锁状态的,将它挂起可 能会导致死锁。
一个线程可以在创建时用THR_SUSPENDED标志设置为挂起。

2.1.15.3 thr_yield()
Thr_yield函数使线程在相同优先级的线程退出挂起状态后交出LWP。(不会有 更高优先级的线程可运行而没有运行,因为它会通过强制的方式取得LWP)。这个 函数具有非常重要的意义,因为在LWP上没有分时的概念(尽管操作系统在执行LWP 时有分时)。
最后,应当注意priocntl(2)也会影响线程调度。更详细的内容请参照"LWP和调度等级"。

上一页  [1] [2] [3] [4] [5] 

[数据载入中...] [返回上一页] [打 印]