zoukankan      html  css  js  c++  java
  • 阿里面试:生产者消费者模型

    阿里内推二面编程题:实现一个生成者消费者模型

    要求:
    1、多线程生产者、多线程消费者
    2、当队列超过>100时,生产者停止生产,队列<20,消费者停止消费
    3、适当加一些print来验证你的程序,不然整个程序跑起来,你是不知道程序是什么情况的

     1 /* Hello World program */
     2 
     3 #include <iostream>
     4 
     5 #include <queue>
     6 #include <mutex>
     7 #include <condition_variable>
     8 #include <thread>
     9 #include <functional>
    10 
    11 //几个要求
    12 //1、多线程生产者、多线程消费者
    13 //2、当队列超过>100时,生产者停止生产,队列<20,消费者停止消费
    14 //3、适当加一些print来验证你的程序,不然整个程序跑起来,你是不知道程序是什么情况的
    15 
    16 
    17 std::queue<int> q;
    18 std::mutex m;
    19 std::condition_variable cv1; //for 100;
    20 std::condition_variable cv2; //for 20;
    21 
    22 void produce(int x){
    23     std::unique_lock<std::mutex> lck(m);
    24     //cycle check.
    25     while(q.size()>100){
    26         cv1.wait(lck);
    27     }
    28     q.push(x);
    29     std::cout << "produce:" << x << std::endl;
    30     if(q.size()>=20) cv2.notify_all();
    31 }
    32 
    33 void consume(){
    34     std::unique_lock<std::mutex> lck(m);
    35     while(q.size()<20) cv2.wait(lck);
    36 
    37     std::cout << "consume:" << q.front() << std::endl;
    38     q.pop();
    39     if(q.size()<100) cv1.notify_all();
    40 }
    41 
    42 
    43 int main()
    44 {
    45     std::thread producers[200];
    46     for(int i=0;i<200;i++){
    47         producers[i]=std::thread(produce,i);
    48     }
    49 
    50     std::thread consumers[200];
    51     for(int i=0;i<200;i++){
    52         consumers[i] = std::thread(consume);
    53     }
    54 
    55     for(auto& p : producers){
    56         p.join();
    57     }
    58     for(auto& c : consumers){
    59         c.join();
    60     }
    61 
    62     //std::cout << "Hello World!";
    63     return 0;
    64 }
  • 相关阅读:
    在windows环境中使用varnish
    CENTOS 5.5 64位 编译安装 webbench 1.5网站压力测试工具
    CentOS设置时间
    Tomcat性能优化
    Squid 2.6 2.7 3.0 3.1 以及 varnish 2.1.5 性能对比测试
    Varnish加速网站图片显示
    保护你的Web服务器 iptables防火墙脚本全解读
    纯静态文件环境下的Nginx优化思路
    tomcat报 Context [] startup failed due toprevious errors
    siege工具安装
  • 原文地址:https://www.cnblogs.com/wxquare/p/7339739.html
Copyright © 2011-2022 走看看