免费注册 查看新帖 |

Chinaunix

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

问个线程的问题 [复制链接]

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

  1. main()
  2. {
  3.      pthread_1
  4.      do...
  5. }
  6. pthread_1()
  7. {
  8.      do...
  9. }
复制代码


我发现只有当pthread_1执行结束,才回到主函数中去执行,并不能同时执行。如果pthread_1中有个死循环就不能返回到主线程了。

论坛徽章:
0
2 [报告]
发表于 2006-12-05 10:15 |只看该作者
贴完整代码

论坛徽章:
0
3 [报告]
发表于 2006-12-05 10:22 |只看该作者
原帖由 飞灰橙 于 2006-12-5 10:15 发表
贴完整代码


  1. #include <pthread.h>
  2. #include <stdio.h>
  3. #include <sys/time.h>
  4. #include <string.h>
  5. #define MAX 10

  6. pthread_t thread[2];
  7. pthread_mutex_t mut;
  8. int number=0, i;

  9. void *thread1()
  10. {
  11.         printf ("thread1 : I'm thread 1\n");

  12.         for (i = 0; i < MAX; i++)
  13.         {
  14.                 printf("thread1 : number = %d\n",number);
  15.                 pthread_mutex_lock(&mut);
  16.                         number++;
  17.                 pthread_mutex_unlock(&mut);
  18.                 sleep(2);
  19.         }


  20.         printf("thread1 :主函数在等我完成任务吗?\n");
  21.         pthread_exit(NULL);
  22. }

  23. void thread_create(void)
  24. {
  25.         int temp;
  26.         memset(&thread, 0, sizeof(thread));          //comment1
  27.         /*创建线程*/
  28.         if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0)       //comment2
  29.                 printf("线程1创建失败!\n");
  30.         else
  31.                 printf("线程1被创建\n");

  32. }

  33. void thread_wait(void)
  34. {
  35.         /*等待线程结束*/
  36.         if(thread[0] !=0) {                   //comment4
  37.                 pthread_join(thread[0],NULL);
  38.                 printf("线程1已经结束\n");
  39.         }
  40. }

  41. int main()
  42. {
  43.         /*用默认属性初始化互斥锁*/
  44.         pthread_mutex_init(&mut,NULL);

  45.         printf("我是主函数哦,我正在创建线程,呵呵\n");
  46.         thread_create();
  47.         printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n");
  48.         thread_wait();

  49.         for (i = 0; i < MAX; i++)
  50.         {
  51.                 printf("main : number = %d\n",number);
  52.                         number++;

  53.                 sleep(3);
  54.         }

  55.         return 0;
  56. }
复制代码


是因为还有void thread_wait(void)这个函数,才又试了去掉这个函数的,可以同时执行。

[ 本帖最后由 zw2002 于 2006-12-5 10:28 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-12-05 10:35 |只看该作者

继续

如果main函数中add recod和pthread中delete record,需要对同一文件操作,采用什么机制好呢?文件锁?

论坛徽章:
0
5 [报告]
发表于 2006-12-05 10:37 |只看该作者
主函数用pthread_join在等待线程退出啊

论坛徽章:
0
6 [报告]
发表于 2006-12-05 13:47 |只看该作者

回复 4楼 zw2002 的帖子

文件锁应该比较好,条件变量也可以考虑。
但是如果很多线程同时访问的话,建议用文件锁。

论坛徽章:
0
7 [报告]
发表于 2006-12-05 15:53 |只看该作者
好的,谢谢各位!

论坛徽章:
0
8 [报告]
发表于 2006-12-05 16:19 |只看该作者
lz糊塗一時,main自己wait的阿~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP