免费注册 查看新帖 |

Chinaunix

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

[函数] 为什么去掉pthread_join,线程函数就不被执行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-15 14:04 |只看该作者 |倒序浏览

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <pthread.h>
  4. #include <thread.h>

  5. void *print_message_function( void *ptr );
  6. int main()
  7. {
  8.         pthread_t thread1, thread2;
  9.         char *message1 = "Hello";
  10.         char *message2 = "World";
  11.         printf("aaaaaaaaaa11\n");
  12.         pthread_create(&thread1, NULL,print_message_function, (void *)message1);
  13.         pthread_join(thread1, NULL);
  14.         printf("aaaaaaaaaa22\n");
  15.         return 0;
  16. }

  17. void *print_message_function( void *ptr )
  18. {
  19.         printf("aaaaaaaaaa\n");
  20.         return 0;
  21. }
复制代码


注掉pthread_join就不会输出aaaaaaaaaa?为什么会这样?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2005-12-15 14:10 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2005-12-15 14:11 |只看该作者
你不等子线程,结果自己先exit了。

sleep 2秒钟试试

论坛徽章:
0
4 [报告]
发表于 2005-12-15 14:26 |只看该作者
没错问题就是主线程先结束了

论坛徽章:
0
5 [报告]
发表于 2005-12-15 14:37 |只看该作者
^_^,明白了

论坛徽章:
0
6 [报告]
发表于 2005-12-15 14:44 |只看该作者
主线程就是main()先结束了,print_message_function()线程没有获得CPU时间显示在显示器上。函数pthread_join用来等待一个线程的结束。函数原型为:
  extern int pthread_join __P ((pthread_t __th, void **__thread_return));
  第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程
的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数
返回时,被等待线程的资源被收回。一个线程的结束有两种途径,一种是线程函数执行完毕,函数结
束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现。它的函数原型为:
  extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__));
  唯一的参数是函数的返回代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将
被传递给 thread_return。最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线
程成功返回,其余调用pthread_join的线程则返回错误代码ESRCH。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP