Chinaunix首页 | 论坛 | 博客
  • 博客访问: 347158
  • 博文数量: 78
  • 博客积分: 3380
  • 博客等级: 中校
  • 技术积分: 857
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-16 19:39
文章分类

全部博文(78)

文章存档

2011年(31)

2010年(47)

分类: LINUX

2010-07-16 21:56:21

6.1、线程的基本概念

线程是进程中的一个独立的控制流,有环境和一系列要执行的指令组成;是一个进程内的基本的调度单位,也可以称为轻量级进程。

使用线程的目的:

多任务程序的设计

并发程序设计

网络程序的设计

数据共享

6.2、线程与进程的区别

进程是系统中程序执行和资源分配的基本单位,

线程是一个进程内的基本调度单位

进程的而所有信息对该进程的所有线程都是共享的。

6.3、线程的基本操作

6.3.1、线程的创建

/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));

6.3.2、线程的退出

导致线程退出的情况:

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执行

6.3.3、线程的等待

格式:extern int pthread_join(pthread_t tid,void **status)

参数一:等待的线程id

参数二:存储被等待的线程的返回值

返回值:成功返回0 否则返回非0

设置某个线程为独立线程:一旦执行成功将于当前进程分离使其成为一个独立的线程,

格式:extern int pthread_detach(pthread_t tid)

6.3.4、线程的取消

1) 一个线程能够被取消并终止执行需要满足一下条件:

该线程是否可以被其他取消是可设置的

该线程处于可取消点才能被取消

格式: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

阅读(699) | 评论(0) | 转发(0) |
0

上一篇:进程间通信知识

下一篇:线程间通信基础

给主人留下些什么吧!~~