linux知识点复习总结.docxVIP

  • 4
  • 0
  • 约2.47千字
  • 约 4页
  • 2019-08-23 发布于福建
  • 举报
四:thread 1.什么是线程的detach状态?怎样设置? detach状态: 一般情况下,线程终止后,其终止状态一直保留到其它线程调用pthread_join获取它的状态为止。 但是线程也可以被置为detach状态,这样的线程一旦终止就立刻回收它占用的所有资源,而不保留终止状态。 不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL。 设置方法: 对一个尚未detach的线程调用pthreadjoin或 pthreaddetach都可以把该线程置为detach状态,也就是 说,不能对同一线程调用两次pthreadjoin,或者如果已经对一个线程调用了pthreaddetach就不能再调用 pthread_join了。 int pthread_detach(pthread_t tid); 返回值:成功返回0,失败返回错误号。 2.叙述函数pthread_join的功能。 函数pthread_join用来等待一个线程的结束,线程间同步的操作。 头文件 : #include pthread.h 函数定义: int pthreadjoin(pthreadt th, void **value_ptr ); th: 被等待线程的标识符 value_ptr :用户定义指针,用来存储被等待结束线程的返回值, 调用该函数的线程将挂起等待,直到id为th的线程终止。 3.进程中使用return、exit、pthreadexit和pthreadcancel分别起到什么作用? return,如果thread线程通过return返回,value_ptr所指向的单元里存放的是thread线程函数的返回值。 exit 终止整个进程。如果进程中的任一线程调用了exit,那么整个进程就会终止。 调用pthreadexit终止自己,valueptr所指向的单元存放的是传给pthread_exit的参数 。 调用pthreadcancel终止同一进程中的另一个线程,valueptr所指向的单元里存放的是常数 PTHREAD_CANCELED,即((void *) -1)。 4.解释关键字restrict的作用。 详细内容请参考:教学文档/pthread/0-restrict.doc 关键字restrict只用于限定指针。 该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于该指针的,即不存在其它进行修改操作 的途径,这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码。 5.线程都有哪些常用属性?在创建时和创建后都怎样进行设置? 线程的属性结构为pthreadattrt,在头文件pthread.h中定义 ,属性值不能直接设置,须使用相关函数进行操 作,初始化的函数为 pthreadattrinit ,这个函数必须在pthread_create函数之前调用。属性对象主要包括是否 绑定、是否分离、堆栈地址、堆栈大小、优先级。默认的属性为非绑定、非分离、缺省的堆栈、与父进程同样级别 的优先级。 线程创建之前,通过各种属性设置函数来给结构体pthreadattrt变量赋值,在创建变量时将pthreadattrt结构 体变量作为参数传入pthraed_create()函数创建已设定某些属性进程。 比如进程 的优先级设置 线程的优先级放在结构schedparam中,目前仅有一个schedpriority 整型变量表示线程的运行优先级。这个参 数仅当调度策略为实时(即SCHEDRR或SCHEDFIFO)时才有效,并可以在运行时通过 pthreadsetschedparam()函数来改变,缺省为0。用函数pthreadattr_getschedparam和函数 pthreadattrsetschedparam进行存放 。 6.pthreadcleanuppush和pthreadcleanuppop这两个函数的作用是什么?什么时候执行? 线程可以安排它退出时需要调用的函数,这样的函数称为线程清理处理程序,线程可以建立多个清理处理程序。处 理程序记录在栈中,也就是说它们的执行顺序与它们注册时的顺序相反。 pthreadcleanuppush()函数执行压栈(注册)清理函数的操作。 pthreadcleanuppop()函数执行从栈中删除清理函数的操作。 函数原型: void pthreadcleanuppush( void (*rtn)(void *), void *arg); rtn 处理程序入口地址 arg 传递给处理函数的参数 void pthreadcleanuppop(int execute); execute表示执行时是否在弹出清理函数的同时执行该注册函数,为0表示不执行

文档评论(0)

1亿VIP精品文档

相关文档