快速业务通道

Linux下的线程编程

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-13
线程:是进程中的一个实体,是被系统独立调用和分派的基本单位.线程基本上不拥有系统资源,共享进程所拥有的全部资源.
线程与进程的比较:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销. Linux实现了POSIX的无名信号量,主要用于线程间的同步和互斥,我在这里介绍几个常用函数.
pthread_create()
#include <pthread.h>

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


一共需要四个参数传递给 pthread_create 函数,调用成功返回 0,否则返回其他值.
线程标识符
这是第一个参数,是一个指针,指向一个 pthread_t 类型的数据.创建一个线程的时候,这个指针指向的变 量里面会被写入一个标识符,以后可以通过这个标识符来引用此线 程.
线程属性
第二个参数设置线程的属性,通常可以传递
Empire CMS,phome.net
NULL 给这个参数.
执行函数
第三个参数就是本线程要执行的函数,这是一个函数指 针,这个函数的形参可以是任何类型的指针(void ),返回值也可 以是任何类型的指针 (void ).
传递给执行函数的参数
第四个参数是一个指向任意类型的指针, 传递给第三个参数作为参数.
pthread_exit()
#include <pthread.h>

void pthread_exit ( void *retval );


pthread_exit() 用于线程退出,可以指定返回值,以便其他线程通过
pthread_join() 函数获取该线程的返回值. return ,是函数返回,
不一定是线程函数! 只有线程函数 return,线程才会退出 exit()
是进程退出,如果在线程函数中调用 exit ,那此线程的进程也就挂了.
会导致该线程所在进程的其他线程也挂掉,比较严重.
pthread_join()
#include <pthread.h>

int pthread_join (pthread_t th, void **thread_return);


相当于进程中的 wait() 函数,第一个参数是要等待的线程,它是用
pthread_create() 创建的线程标识符.第二个参数是一个指针,这个指
针指向线程的返回值.成功返回0,出错返回错误代码.
线程同步 信号量同步 信号量函数名字都以 sem_ 开头,线程中使用的基本信号量函数有四个. 创建信号量 sem_init()
#include <semaphore.h>

int sem_init (set_t *sem,
Empire CMS,phome.net
int pshared, unsigned int value);


对由 sem 指定的信号量进行初始化,设置好它的共享项,给它一个整数 类型的初始值. pshared 参数控制着信号量的类型,如果其值为0,则 表示它是当前进程的局部信号量;否则,其他进程就可以共享这个信号量. sem_wait() 和 sem_post()
#include <semaphore.h>

int sem_wait( set_t *sem);
int sem_post( set_t *sem);


sem_post() 给信号量的值加上一个 "1"; sem_wait() 给一个信号量减 去 "1",永远等待信号量的值不为零才执行这个动作. 清理信号量 sem_destroy()
#include <semaphore.h>

int sem_destroy (sem_t * sem);


记住,初始化信号量一般设置其值为0,等待的线程如果需要其他“线程”先执行,以 便得到自己想要的数据,就使用 sem_wait() 函数等待.别的线程在准 备好数据后,就使用 sem_post() 函数增加信号量的值.注销创建 的信号量是个好习惯!
Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号