C++ 多线程顺序打印

打印要求:

三个打印线程顺序进行。

线程要求如下:

线程A:打印A

线程B:打印B

线程C:打印C

打印结果:

A
B
C
A
B
C
A
B
C
A
B
C
A
B

法一:需要锁和共享变量

#include <iostream>
#include <thread>
#include <mutex>

using std::cout;
using std::endl;
using std::thread;
using std::mutex;
using std::condition_variable;
using std::unique_lock;

enum CVFLAG
{
    INIT,
    A_DONE,
    B_DONE,
    C_DONE
};

mutex mtx;
condition_variable cv;
CVFLAG flag = INIT;

void printA()
{
    unique_lock<mutex> lock(mtx);
    cout << "A" << endl;
    flag = A_DONE;
    cv.notify_all();
}

void printB()
{
    unique_lock<mutex> lock(mtx);
    cv.wait(lock, [] { return flag == 1; });
    cout << "B" << endl;
    flag = B_DONE;
    cv.notify_all();
}

void printC()
{
    unique_lock<mutex> lock(mtx);
    cv.wait(lock, [] { return flag == 2; });
    cout << "C" << endl;
    flag = C_DONE;
    cv.notify_all();
}

int main()
{
    int i = 0;
    while (i < 5)
    {
        thread tA(printA);
        thread tB(printB);
        thread tC(printC);
        tA.join();
        tB.join();
        tC.join();
        ++i;
    }
    return 0;
}

法二:简单粗暴,调整join的顺序

#include <iostream>
#include <thread>
#include <mutex>

using std::cout;
using std::endl;
using std::thread;

void printA()
{
    cout << "A" << endl;
}

void printB()
{
    cout << "B" << endl;
}

void printC()
{
    cout << "C" << endl;
}

int main()
{
    int i = 0;
    while (i < 5)
    {
        thread tA(printA);
        tA.join();
        
        thread tB(printB);
        tB.join();
        
        thread tC(printC);
        tC.join();
        ++i;
    }
    return 0;
}

相关推荐

  1. C++ 线顺序打印

    2024-01-09 15:16:03       38 阅读
  2. 线交替打印

    2024-01-09 15:16:03       33 阅读
  3. 线轮流打印a,b,c

    2024-01-09 15:16:03       34 阅读
  4. C++ 线

    2024-01-09 15:16:03       27 阅读
  5. C++ 线

    2024-01-09 15:16:03       19 阅读
  6. C#线

    2024-01-09 15:16:03       12 阅读
  7. C++ 线

    2024-01-09 15:16:03       12 阅读
  8. 线C#】

    2024-01-09 15:16:03       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-09 15:16:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-09 15:16:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-09 15:16:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-09 15:16:03       20 阅读

热门阅读

  1. dockerfile和docker-composer配置和启动

    2024-01-09 15:16:03       37 阅读
  2. 【Python库】pillow (PIL)库的用法介绍

    2024-01-09 15:16:03       34 阅读
  3. 213. 打家劫舍 II

    2024-01-09 15:16:03       35 阅读
  4. Python Pillow(PIL)库的用法介绍

    2024-01-09 15:16:03       39 阅读
  5. Python Pillow(PIL)详细使用指南

    2024-01-09 15:16:03       32 阅读
  6. php之 校验多个时间段是否重复

    2024-01-09 15:16:03       41 阅读
  7. RabbitMQ笔记

    2024-01-09 15:16:03       32 阅读
  8. 安全认证 | CISP证书学习需要多长时间?

    2024-01-09 15:16:03       37 阅读