C++并发实战:面试题3:一道google笔试题

来源:互联网 发布:配色软件中文 编辑:程序博客网 时间:2024/04/30 08:16
题目:有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:
A:1 2 3 4 1 2....
B:2 3 4 1 2 3....
C:3 4 1 2 3 4....

D:4 1 2 3 4 1....

c++11代码:

#include<iostream>#include<thread>#include<mutex>#include<condition_variable>#include<stdlib.h>using namespace std;#define LOOP 10mutex m;condition_variable cond;int flag;void fun(int num){    for(int i=0;i<LOOP;i++){        unique_lock<mutex> lk(m);        while(flag!=num)            cond.wait(lk);        cout<<num+1<<" ";        flag=(flag+1)%4;        cond.notify_all();    }}int main(int argc,char* argv[]){//argv[1]为0时写入A文件,2时写入B文件...    flag=atoi(argv[1]);    thread one(fun,1);    thread two(fun,2);    thread three(fun,3);    fun(0);    one.join();    two.join();    three.join();    cout<<endl;    return 0;}


0 0
原创粉丝点击