快速业务通道

pthread线程库简介

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-29
其他一些操作系统比如Solaris则是MxN的,M对应创建的线程数,N对应操作系统可以运行的实体.(N<M),优点是线程切换快,但实现稍复杂.

2.Linux线程库pthread

(1). 测试宏

#ifdef _POSIX_THREADS

或者sysconf(_SC_THREADS)

来检测是否支持宏.

(2). 线程标识pthread_t

pit_t是整个系统中唯一的.而线程pthread_t(struct)不同,只在它所属的进程环境有效.

判断两个线程ID是否相等:

#include <pthread.h>

int pthread_equal(pthread_t tid1, pthread_t tid2);

//返回值若相等则返回非0值,不相等则返回0

获得线程自身pthread_t

pthread_t pthread_self(void)

(3).线程创建

程序启动时,它是以单进程的单个控制进程启动的.如果要增加新的线程,可以调用pthread_create来创建.

#include <pthread.h>

int pthread_create(

pthread_t *restrict tidp, /*第一个参数为指向线程标识符的指针*/

const pthread_attr_t *restrict attr, /*第二个参数用来设置线程属性*/

void *(*rtn)(void), /*第三个参数是线程运行函数的起始地址*/

void *restrict arg /*一个参数是运行函数的参数*/

);

//若成功则返回0,否则返回错误编号.它不设置errno

C99中的新关键字restrict以及受限指针(restricted pointers).受限指针作为一种编译器优化代码的方式,是由编译器厂商提供特定的实现.

restrict只可以用在指针身上.如果一个指针被restrict修饰,那么就在它(这个指针)和它所指向的对象之间建立了一种特殊的联系──只能用这个指针或者这个指针的表达式来访问这个对象的值.一个指针指向一个内存地址.同一块内存可以由多个指针来访问并在程序运行时修改它(这块内存).restrict告诉编译器,如果一块由一个被restrict修饰的指针所指向的内存被修改了,那么没有其它的指针可以来访问这块内存.编译器可能会选择一种方式来优化代码中调用被restrict修饰的指针的部分,这可能导致错误发生.程序员有责任来确保正确地按照他们所设想的来使用被restrict修饰的指针,否则的话,可能会发生意想不到的结果.

如果一块特定的内存区没有被修改,那么它可以被多个restrict指针(被restrict修饰的指针)所指代(或者叫做引用或访问).另外,restrict指针的赋值是有限制的,这一点在函数调用和嵌套块(nested block)之间是没有区别的.在包含restrict指针的块中,只能将外层的restrict指针的值赋给内层的restrict指针,在同层内不可以相互赋值,当然在外层不可能赋以内层的值.一个例外是,当一个声明restrict指针的代码快执行完后,这个restrict指针所指的内存就可以被其它的指针访问了(那个restrict是那个代码块的局部变量,当执行完那个代码块后,这个指针也就不复存在了).

(4). 线程终止

如果进程中的任一线程调用了exit, __EXIT虎或_exit,那么整个进程就会终止.与之类似如果信号的默认动作是终止进程,那么信号发送到线程就会终止整个进程.

线程的退出方式:

(1).线程只从启动函数中返回,返回值是线程的退出码.

(2).线程可以被同一进程中其他线程取消.

(3).线程调用pthread_exit().

void pthread_exit(void *rval_ptr);

rval_ptr是一个无类型指针,与传给启动函数的单个参数类似.进程中其他进程可以调用pthread_join函数访问到这个指针.如果线程从启动函数返回,rval_ptr将包含返回码.如果线程被取消,由rval_ptr指定的内存单元就置为PTHREAD_CANCELED.如果对线程的返回值不感兴趣,那么就可以把rval_ptr设置为NULL.在样调用pthread_join函数将等待指定的线程终止,但并不获取线程的终止状态.例如在线程启动函数中返回:return ((void *) 1)这样pthread_join的函数可以通过rval_ptr这个指针

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号