0
点赞
收藏
分享

微信扫一扫

C艹多线程循环打印队列或者数字

TiaNa_na 2022-03-10 阅读 32
直接上代码!!!
```cpp
#include <cstdio>
#include<iostream>
#include<mutex>
#include<condition_variable>
#include<queue>

using namespace std;

class A
{
private:
    mutex mu;
    condition_variable cv;

    mutex mu1;
    condition_variable cv1;
    bool flag = true;
    int num = 10;

    queue<int> que;
public:

    //队列有序读写
    void writeFun()
    {
        for (int i = 0;i < 10;++i)
        {
            unique_lock<mutex> lock(mu);
            cv.wait(lock, [this] {return que.empty() == true;});
            cout << "正在写入队列一个数字" << endl;            
            que.push(i); 
            cv.notify_one();
        }
    }
    void readFun()
    {
        for (int i = 0;i < 10;++i)
        {
            unique_lock<mutex> lock(mu);
            cv.wait(lock, [this] {
                return que.empty()==false;
                }
            );
            cout << "正在读取队列一个数字" << que.front() << endl;
            que.pop();
            cv.notify_one();           
        }

    }

    void printA() 
    {
        while (num--)
        {
            unique_lock<mutex> lk(mu1);
            cv1.wait(lk, [this]() {return flag;});
            cout << "A" << endl;
            flag =false;
            cv1.notify_one();
        }
    }
    void printB()
    {
        while (num--)
        {
            unique_lock<mutex> lk(mu1);
            cv1.wait(lk, [this]() {return !flag;});
            cout << "B" << endl;
            flag =true;
            cv1.notify_one();
        }
    }





};


int main()
{
    A a;
    /*thread thread1(&A::writeFun, ref(a));
    thread thread2(&A::readFun, ref(a));*/
    thread thread1(&A::printA, ref(a));
    thread thread2(&A::printB, ref(a));
    thread1.join();
    thread2.join();
    std::cout << "Hello World!\n";
}





举报

相关推荐

0 条评论