Chinaunix

标题: 问个线程的问题 [打印本页]

作者: zw2002    时间: 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中有个死循环就不能返回到主线程了。
作者: 飞灰橙    时间: 2006-12-05 10:15
贴完整代码
作者: zw2002    时间: 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 编辑 ]
作者: zw2002    时间: 2006-12-05 10:35
标题: 继续
如果main函数中add recod和pthread中delete record,需要对同一文件操作,采用什么机制好呢?文件锁?
作者: 飞灰橙    时间: 2006-12-05 10:37
主函数用pthread_join在等待线程退出啊
作者: hebioldman    时间: 2006-12-05 13:47
标题: 回复 4楼 zw2002 的帖子
文件锁应该比较好,条件变量也可以考虑。
但是如果很多线程同时访问的话,建议用文件锁。
作者: zw2002    时间: 2006-12-05 15:53
好的,谢谢各位!
作者: zhousqy    时间: 2006-12-05 16:19
lz糊塗一時,main自己wait的阿~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2