您的位置:首页 > 编程语言 > C语言/C++

C++并行开发Pthread之线程(一)

2016-03-19 21:19 302 查看
线程对象

pthread_t

属性:竞争范围、栈大小、栈地址、分离状态、调度策略和参数

状态:可运行、运行、停止、休眠(阻塞)

Pthread库可用于创建、维护和管理多线程和应用程序中的线程。

1.创建线程

int pthread_create(pthread_t * restrict thread,const pthread_attr_t *restrict attr,void*(*start_routine)(void*),void*restrict arg);

 若成功则返回0,否则返回出错编号

参数

  第一个参数为指向线程标识符的指针。

  第二个参数用来设置线程属性。

  第三个参数是线程运行函数的起始地址。

最后一个参数是运行函数的参数。

2.结合线程(pthread_join)

Pthread_join用于结合或者再次结合进程中的控制流。Pthread_join导致调用线程它挂起,直到目标进程终止。它类似进程所使用的wait()函数。这个函数有线程的创建者调用,该调用线程等待新的线程终止并返回,然后再次结合到调用线程的控制流中。

intpthread_join(pthread_t thread,void **value_ptr)

参数thread是调用线程正在等待的目标线程。如果目标线程成功返回,则它的退出状态保存在value_ptr中

3.获取线程的id

pthread_tpthread_self(void)

当一个线程被创建之后,会将线程id返回到调用线程。一旦线程有了自己的id之后,可以将id传递给进程中的其他线程。

4.比较两个线程

pthread_equal(pthread_tthreadA, pthread_t threadB)

如果相同,返回非零值,否则返回零。

5.线程属性对象pthread_attr_t

线程有一组属性是可以在创建线程的时候指定。该属性封装在一个对象中,可以用来设置一个或者一组线程的属性。

pthread_attr_t拥有一些方法来设置

属性函数的类型
pthread属性函数
初始化
pthread_attr_init()
pthread_attr_destory()
栈管理
pthread_attr_setstacksize()
pthread_attr_getstacksize()
pthread_attr_setguardiseze ()
pthread_attr_getguardiseze ()
pthread_attr_setstack ()
pthread_attr_getstack ()
pthread_attr_setstackddr ()
pthread_attr_getstackddr ()
分离状态
pthread_attr_setdetachstate ()
pthread_attr_getdetachstate ()
竞争范围
pthread_attr_setscope ()
pthread_attr_getscope ()
调度继承机制
pthread_attr_setinheritsched()
pthread_attr_getinheritsched()
调度策略
pthread_attr_setschedpolicy()
pthread_attr_getschedpolicy()
调度参数
pthread_attr_setschedparam()
pthread_attr_getschedparam()
6.使用Pthread创建分离的线程

在默认情况下,当线程退出时,操作系统在线程同另一个线程结合时保持线程的完成状态以及现场id。如果退出的线程不同其他线程结合,则称退出的线程是分离的(detached)。这种情况下,不保存完成状态和线程id。在分离的线程上不能使用pthread_join。否则会报错。

已经运行的线程是可以分离的。线程可能不再对目标线程结果感兴趣,线程可以分离,使得线程一旦退出,它的资源就可以被收回。

调用形式

intpthread_detach(pthread_t tid);

二、管理线程

1.终止线程

当线程到达程序指令结尾时,就会终止。当线程终止后,pthread库收回线程使用的系统资源并保存它的退出状态。线程也可能会在它执行完所有指令之前,并另一个对等的线程提取终止。

A.自终止

线程可以调用pthread_exit()方法来终止

int pthread_exit(void * value_ptr)

当可结合线程结束执行之后,它会返回到将它作为目标线程调用pthread_join的线程。当终止线程调用pthread_exit()时候,它在$value_ptr中得到退出状态。退出状态被返回到pthread_join.

B.终止对等线程

使用pthread_cancel()来终止对等线程。应用程序中可能会有一个线程监视其他线程的工作。如果某个线程执行不力或者是不在需要,为了节省系统资源,有必要终止该线程。多个线程可能用于解决一个问题,但是一旦某个线程得到解答,其他的线程可以被监视线程或是是得到解答的线程取消。

对于pthread_cancel的调用时取消一个对等线程的请求。这个请求可能立即被同意、稍后被同意、甚至被忽略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: