Chinaunix首页 | 论坛 | 博客
  • 博客访问: 501732
  • 博文数量: 174
  • 博客积分: 8001
  • 博客等级: 中将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-04 19:30
文章分类

全部博文(174)

文章存档

2011年(1)

2010年(24)

2009年(149)

我的朋友

分类: LINUX

2009-03-23 23:19:57

这一篇主要是对线程的一些基本的东西进行讨论的。
PS:关于多线程编程的博大与精深,不是小菜能够理解透彻的。当然现在只能看些皮毛,有机会拜读大作。在IBM上连载的POSIX线程编程指南是不错的资料。
创建一个线程:
int pthread_creat(pthread_t *threadID, const pthread_attr_t *attr, 
void *(×start_routine)(void *), void *arg);
start_routine:(程序)进入点,这个单词从概念上说明了,不同的线程是同一程序的不同执行点。

获得线程ID:
pthread_t pthread_self(void);

退出线程:
void pthread_exit(void *retval);

将新创建的线程加入到原进程中:
int pthread_joid(pthread_t th, void **thread_return);
这个函数类型wait, waitpid, 在Linux的内核看来(这个是Linux的实现范畴),线程只是共享资源的进程,调度算法是一样的,也占据着进程表项,所以当线程退出执行的时候,就有可能变成类似Zombie进程。
关于退出线程和聚合线程,还有一点需要说明,就是传递的参数。因为线程拥有自己的栈,所以使用线程的局部变量返回,是错误的。
而讨论到return和pthread_exit(NULL)的区别:
“理论上说,pthread_exit()和线程宿体函数退出的功能是相同的,函数结束时会在内部自动调用pthread_exit()来清理线程相关的资源。但实际上二者由于编译器的处理有很大的不同。
在进程主函数(main())中调用pthread_exit(),只会使主函数所在的线程(可以说是进程的主线程)退出;而如果是return,编译器将使其调用进程退出的代码(如_exit()),从而导致进程及其所有线程结束运行。”
所以呢,在宿体函数内是没有区别的(理论上);但是在宿主函数内,return将结束进程。

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

上一篇:内存

下一篇:信号

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