分类: LINUX
2010-07-16 21:56:21
线程是进程中的一个独立的控制流,有环境和一系列要执行的指令组成;是一个进程内的基本的调度单位,也可以称为轻量级进程。
使用线程的目的:
l 多任务程序的设计
l 并发程序设计
l 网络程序的设计
l 数据共享
进程是系统中程序执行和资源分配的基本单位,
线程是一个进程内的基本调度单位
进程的而所有信息对该进程的所有线程都是共享的。
/usr/include/bits/pthread.h
格式:extern int pthread_create
(
pthread_t *newthread,
//指向线程id的指针,存放线程id (unsigned long int)%u
const pthread_attr_t *attr,
//设置线程的属性,一般设置为NULL,使用系统默认属性
void *(*start_routine)(void *),
//线程运行的代码起始地址,即函数名
void *arg
//运行函数的参数
);
返回值:成功返回0,失败非0
创建成功,他将拥有自己的线程属性和执行栈,并从调用程序那里继承信号掩码和调试优先级。
实例:pthread_create(&thread_id, NULL,myfunc,NULL(&test));
导致线程退出的情况:
1) 调用pthread_exit函数退出
2) 调用pthread_cancel函数取消该线程
3) 创建线程的进程退出或整个函数结束
4) 其中一个线程执行了exec类函数执行新的进程
格式:extern void pthread_exit( void *status)
线程退出前的操作和atexit()函数类似:
自动释放资源:
格式:配对使用
Void pthread_clean_push(void (*routine)(void *),void *arg);
Void pthread_clean_pop(int execute),execute为0不执行,非0执行
格式:extern int pthread_join(pthread_t tid,void **status)
参数一:等待的线程id
参数二:存储被等待的线程的返回值
返回值:成功返回0 否则返回非0
设置某个线程为独立线程:一旦执行成功将于当前进程分离使其成为一个独立的线程,
格式:extern int pthread_detach(pthread_t tid)
1) 一个线程能够被取消并终止执行需要满足一下条件:
l 该线程是否可以被其他取消是可设置的
l 该线程处于可取消点才能被取消
格式:extern int pthread_cancel(pthread_t tid);
2) 设置是否可取消的操作
函数格式:extern int pthread_setcancelstate(int state , int * oldstate)
State可取消状态所要设置的值:
不可传递请求,可取消设置为:PTHREAD_CANCEL_DISABLE
可传递请求,设置:PTHREAD_CANCEL_DISABLE
Oldstate存储调用线程原来的可取消性状态的地址
3) 设置是否处于取消点取消还是立即取消
函数格式:extern int pthread_setcanceltype(int type,int oldtype);
Type:
可随时执行新的或未决的取消请求:PTHREAD_CANCEL_ASYNCHRONOUS
到达一个取消点前,取消请求一直处于未决状态PTHREAD_CANCEL_DEFERRED