zoukankan      html  css  js  c++  java
  • C++11 并发(一道笔试题目)

    题目:编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

    #include <iostream>
    #include <thread>
    #include <mutex>
    #include <condition_variable>
    
    using namespace std;
    
    mutex m;
    condition_variable cond;
    int LOOP=10;
    int flag=1;
    
    void PrintID_A()
    {
        for(int i=0;i<LOOP;i++)
        {
            unique_lock<mutex> locker(m);
    
            while(flag!=1)
                cond.wait(locker);
            cout<<"A  ";
            flag=(flag+1)%3;
            cond.notify_all();
        }
    }
    
    void PrintID_B()
    {
        for(int i=0;i<LOOP;i++)
        {
            unique_lock<mutex> locker(m);
            while(flag!=2)
                cond.wait(locker);
            cout<<"B  ";
            flag=(flag+1)%3;
            cond.notify_all();
        }
    }
    
    void PrintID_C()
    {
        for(int i=0;i<LOOP;i++)
        {
            unique_lock<mutex> locker(m);
            while(flag!=0)
                cond.wait(locker);
            cout<<"C  ";
            flag=(flag+1)%3;
            cond.notify_all();
        }
    }
    
    
    int main(){
      
        thread A(PrintID_A);
        thread B(PrintID_B);
        thread C(PrintID_C);
    
        A.join();
        B.join();
        C.join();
        cout<<endl;
        
        return 0;
    }
  • 相关阅读:
    mysql正则表达式
    阿里云OSS 获取目录下所有文件
    docker 部署mvc项目 <四>
    docker部署项目 <三>
    docker 安装mysql数据库 <二>
    docker安装 <一>
    安装 Docker <一>
    Mongodb字段自增长
    EF的使用<三>
    EF 简单介绍<一>
  • 原文地址:https://www.cnblogs.com/wxquare/p/4769693.html
Copyright © 2011-2022 走看看