免费注册 查看新帖 |

Chinaunix

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

linux多线程编程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-24 13:48 |只看该作者 |倒序浏览

线程的创建

int pthread_create(pthread_t *tid, const pthread_attr_t *attr,
     void *(*start_rtn)(void), void *arg);

pthread_create创建成功时返回0,tid存放创建线程的id,第二个参数为创建线程的属性,第三个为线程的执行路径,第四个参数为传给创建线程的参数

线程的退出
线程可以选择三种方式退出,在不终止整个进程的情况下停止它的执行流。
1.       线程从启动例程中返回,返回值是线程的退出码。
2.       线程被同一进程中的其它线程取消。
3.       线程调用pthread_exit();
4.       主进程结束,该进程中的所有线程也会被终止。(java,python中有一个守护线程的概念,是指专为普通用户线程服务的线程,当所有的用户线程退出时,所有的守护线程也要退出(没有了用户线程,守护线程也就没有了服务对象),整个进程也就结束

进程中的其它线程通过pthread_join来获取线程的终止状态。
void pthread_exit(void *retval);
void pthread_join(pthread_t tid, void **retval);

给线程传递参数
1.       最好使用堆中的参数,但需要注意在线程结束后释放堆的空间。
2.       如果使用栈中的参数,必须保证线程执行时,堆栈的数据空间没有被释放。

分离线程
在默认情况下,线程的终止会保存到对该线程调用pthread_join,如果主线程对它所创建的线程的终止状态并不感兴趣,则可让线程处于分离状态,这样,线程的底层资源可以再线程终止时立即被回收。

1.       创建带有分离属性的线程

pthread_t thread_id;
pthread_attr_t attr;
pthread_attr_init(&attr);pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&thread_id, &attr, &print_xs, (void*)arg);
pthread_detach(thread_id);
pthread_attr_destroy(&attr);

//这时,即使调用也不能获取到创建线程的终止状态
int *res;
  pthread_join(thread_id, &res);

2.       使用pthread_detach使得指定线程处于分离转态

pthread_t thread_id;
pthread_create(&thread_id, &attr, &print_xs, (void*)arg);
pthread_detach(thread_id);

/* 或在创建的线程中分离自己,但如果线程调用pthread_detach之前,主线程已经调用thread_join,pthread_detach将不做任何事,此时pthread_join仍能获取到pthread_exit返回的状态。*/
void* print_xs (void* arg)
{
  pthread_detach(pthread_self());
  /* do some work */
}



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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP