zoukankan      html  css  js  c++  java
  • 第四题(迅雷笔试题):编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

     1 #include <iostream>
     2 #include <stdlib.h>
     3 #include <pthread.h>
     4 using namespace std;
     5 
     6 pthread_mutex_t myloack=PTHREAD_MUTEX_INITIALIZER;
     7 pthread_cond_t mycond=PTHREAD_COND_INITIALIZER;
     8 int n=0;
     9 void *ThreadFunc(void *arg)
    10 {
    11     int num=(int )arg;
    12     for (int i = 0; i < 10; ++i)
    13     {
    14         pthread_mutex_lock(&myloack);
    15         while (n!=num)
    16             pthread_cond_wait(&mycond,&myloack);
    17 
    18         if (num==0)
    19             cout<<"A";
    20         else if(num==1)
    21             cout<<"B";
    22         else
    23             cout<<"C"<<endl;
    24         n=(n+1)%3;
    25         pthread_mutex_unlock(&myloack);
    26         pthread_cond_broadcast(&mycond);
    27     }
    28     return (void *)0;
    29 }
    30 int  main(int argc, char const *argv[])
    31 {
    32     pthread_t id[3];
    33     for (int i = 0; i < 3; ++i)
    34     {
    35         int err=pthread_create(&id[i],NULL,ThreadFunc,(void *)i);
    36         if (err!=0)
    37         {
    38             cout<<"create err:"<<endl;
    39             exit(-1);
    40         }
    41 
    42     }
    43 
    44     for (int i = 0; i < 3; ++i)
    45     {
    46         int ret=pthread_join(id[i],NULL);
    47         if (ret!=0)
    48         {
    49             cout<<"join err:"<<endl;
    50             exit(-1);
    51         }
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    java学习笔记05--字符串 .
    java学习笔记04--数组
    java学习笔记07--日期操作类
    java学习笔记14--动态代理
    java学习笔记09--反射机制
    java学习笔记06--正则表达式
    java学习笔记08--泛型
    java学习笔记10--枚举
    java学习笔记11--Annotation
    交叉熵代价函数
  • 原文地址:https://www.cnblogs.com/lanye/p/3371041.html
Copyright © 2011-2022 走看看