汐っ阳luozhiyong131.blog.chinaunix.net
luozhiyong131
全部博文(961)
Java(33)
Android基础(58)
Linux设备驱动(55)
TP(0)
IC卡规范(13)
交易流程(3)
EMV2000(18)
C语言编程规范(10)
CC2530(0)
PIC单片机(12)
8051单片机(36)
QT(22)
内核驱动(14)
应用程序(7)
系统构建(5)
Linux内核驱动(57)
Linux系统构建(11)
数据库(19)
ARM程序设计(34)
Linux_C编程(51)
shell编程(8)
C++算法(8)
C++基础编程(62)
C语言编程(46)
QT(28)
基于ARM9的远程视(6)
应用程序(3)
内核(10)
其他(13)
ARM(2)
配置(1)
多线程(9)
Linux C(10)
Linux下C编程 实(12)
驱动开发(2)
QT 图形界面(5)
应用程序的移植(4)
TX2440 内核驱动(12)
内核、系统文件下(4)
Linux 系统操作(5)
内核移植、文件系(4)
Bootloader移植(13)
s3c2440 硬件资源(4)
嵌入式开发环境搭(7)
Bootload(1)
内核开发(26)
应用程序设计(5)
Linux系统管理与(13)
2016年(1)
2015年(61)
2014年(41)
2013年(51)
2012年(235)
2011年(391)
2010年(181)
64492407
Cindy_ls
ycy52025
hushup
dallygar
18325057
liziyun2
Mars1122
jzjwonde
dreampow
张三13aw
QWE866
nanakagu
danzhoum
sip_chen
zwh0309
月泉蓝石
zoumaden
分类: C/C++
2010-12-11 09:53:52
#include <stdio.h>#include <pthread.h>#include <unistd.h>/*线程清理函数*/void *clean(void *arg){ printf("cleanup :%sn",(char *)arg); return (void *)0;}/*线程1的执行函数*/void *thr_fn1(void *arg){ printf("thread 1 start n"); /*将线程清理函数压入清除栈两次*/ pthread_cleanup_push( (void*)clean,"thread 1 first handler"); pthread_cleanup_push( (void*)clean,"thread 1 second hadler"); printf("thread 1 push complete n"); if(arg) { return((void *)1); //线程运行到这里会结束,后面的代码不会被运行。由于是用return退出,所以不会执行线程清理函数。 } pthread_cleanup_pop(0); pthread_cleanup_pop(0); return (void *)1;}/*线程2的执行函数*/void *thr_fn2(void *arg){ printf("thread 2 start n"); /*将线程清理函数压入清除栈两次*/ pthread_cleanup_push( (void*)clean,"thread 2 first handler"); pthread_cleanup_push( (void*)clean,"thread 2 second handler"); printf("thread 2 push complete n"); if(arg) { pthread_exit((void *)2);//线程运行到这里会结束,后面的代码不会被运行。由于是用pthread_exit退出,所以会执行线程清理函数。执行的顺序是先压进栈的后执行,即后进先出。 } pthread_cleanup_pop(0); pthread_cleanup_pop(0); pthread_exit((void *)2);}int main(void){ int err; pthread_t tid1,tid2; void *tret; /*创建线程1并执行线程执行函数*/ err=pthread_create(&tid1,NULL,thr_fn1,(void *)1); if(err!=0) { printf("error .... n"); return -1; } /*创建线程2并执行线程执行函数*/ err=pthread_create(&tid2,NULL,thr_fn2,(void *)1); if(err!=0) { printf("error .... n"); return -1; } /*阻塞等待线程1退出,并获取线程1的返回值*/ err=pthread_join(tid1,&tret); if(err!=0) { printf("error .... n"); return -1; } printf("thread 1 exit code %d n",(int)tret); /*阻塞等待线程2退出,并获取线程2的返回值*/ err=pthread_join(tid2,&tret); if(err!=0) { printf("error .... "); return -1; } printf("thread 2 exit code %d n",(int)tret); return 1;}
上一篇:线程同步(互斥量)
下一篇:线程同步——信号量
登录 注册