免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1172 | 回复: 0
打印 上一主题 下一主题

linux多线程pthread [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-23 11:10 |只看该作者 |倒序浏览
  linux中的多线程使用了libpthread.a,因为在编译的时候需要加入该库-lpthread。多线程跟多进程不一样,线程是基于进程而存在的,线程之间共享了进程的数据,因为在使用多线程时,需要放置对共享数据的破坏。
   
  linux多线程pthread的函数声明在中,因此在使用该函数时,需要把该头文件引入。

线程的创建
1、创建
int pthread_create( pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(* func) (void *), void *restrict arg );
attr: 线程属性包括:优先级、初始栈大小,是否应该成为一个守护线程。
缺省设置,NULL
tidp是要创建的线程,创建成功后tipd为先线程的id

void *(* func) (void *)是一个函数指针,该函数指针的类型为void* (*)(void *)
是一个参数为void *,返回值也为void *的函数类型。它的一个简单的例子如下
void *thread_handler(void *arg)
{
return NULL;
}
void *restrict arg
中的arg是void *(* func) (void *)函数指针的参数。
补充:函数声明中多次出现了restrict,其实这是用于CPU对函数的优化使用的,restrict的使用,由程序员保证使用restrict标志的参数间不会有内存重叠。

获取线程自身的id
pthread_t pthread_self(void);

等待给定线程终止
int pthread_join( pthread_t tid, void **status);
statues返回等待线程的返回值
单个线程有三种退出方式
1.线程从启动例程中返回(return方式),返回值是现成的退出码
2.线程被同一进程内的其他线程取消
3.线程调用pthread_exit退出。void pthread_exit(void *rval_ptr)

线程清理处理程序
void pthread_clean_push(void (*rtn)(void *),void *arg)
void pthread_clean_pop(iny excute)
清理函数rtn的调用顺序是由pthread_clean_push函数安排的。
它在下列几种情况下执行:
1.调用pthread_exit时
2.响应取消请求时
3.用非零execute参数调用pthread_clean_pop时
如果execute参数为0,清理函数将不被调用。无论何种情况,pthread_clean_pop都将删除上次pthread_clean_push建立的清理处理程序。
如果线程使用return从例程返回,那么pthread_clean_push建立的清理处理程序不会被执行。
linux thread与fork的对比
进程原语
线程原语
描述
fork
pthread_create
创建新的控制流
exit
pthread_exit
从现有的控制流退出
waitpid
pthread_join
从控制流中得到退出状态
atexit
pthread_clean_push
注册在退出控制流时执行的函数
getpid
pthread_self
获得控制流ID
abort
pthread_cancel
请求控制流的非正常退出


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/101537/showart_2004246.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP