Chinaunix首页 | 论坛 | 博客
  • 博客访问: 201360
  • 博文数量: 24
  • 博客积分: 608
  • 博客等级: 中士
  • 技术积分: 371
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-22 21:10
文章分类

全部博文(24)

文章存档

2012年(24)

分类: LINUX

2012-09-26 15:09:00

子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. #include <unistd.h>
  5. #include <string.h>

  6. #define LOOP 5

  7. int num = 0;
  8. int parm_0 = 0;
  9. int parm_1 = 1;

  10. pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
  11. pthread_cond_t qready=PTHREAD_COND_INITIALIZER;

  12. void* thread_func(void *arg)
  13. {
  14.     int i, j;
  15.     for(i = 0; i < LOOP; i++)
  16.     {
  17.         pthread_mutex_lock(&mylock);
  18.         while(parm_0 != num)
  19.             pthread_cond_wait(&qready, &mylock);
  20.     
  21.         printf("thread: \n");
  22.         for(j = 0; j < 10; j++)
  23.             printf(" %d ", j);
  24.         printf("\n");
  25.         
  26.         num = (num + 1) % 2;
  27.         pthread_mutex_unlock(&mylock);
  28.         pthread_cond_signal(&qready);
  29.     }
  30.     
  31.     return (void*) 0;
  32. }

  33. int main()
  34. {
  35.     int i, k;
  36.     pthread_t tid;
  37.     void *tret;
  38.     
  39.     
  40.     pthread_create(&tid, NULL, thread_func, NULL);
  41.     
  42.     for(i = 0; i < LOOP; i++)
  43.     {
  44.         pthread_mutex_lock(&mylock);
  45.         
  46.         while(parm_1 != num)
  47.             pthread_cond_wait(&qready, &mylock);
  48.         
  49.         printf("main: \n");
  50.         for(k = 0; k < 10; k++)
  51.             printf(" %d", k + 100);
  52.         printf("\n");
  53.         
  54.         num = (num + 1) % 2;
  55.         pthread_mutex_unlock(&mylock);
  56.         pthread_cond_signal(&qready);
  57.     }
  58.     
  59.     pthread_join(tid, &tret);    
  60. }

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

上一篇:一道多线程面试题分析(控制输出顺序)

下一篇:没有了

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