pthread线程库简介
其他一些操作系统比如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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |