C++三个线程依次打印abc

代码

cpp 复制代码
#include<iostream>
#include<thread>
#include<mutex>
#include<condition_variable>
using namespace std;
mutex mtx;
condition_variable cv;
int flag=0;
void A(){
    unique_lock<mutex>lk(mtx);
    int count=0;
    while(count<10){
        while(flag!=0) cv.wait(lk);
        cout<<"thread1 : a"<<endl;
        count++;
        this_thread::sleep_for(chrono::milliseconds(500));
        flag=1;
        cv.notify_all();
        
    }
    cout<<"thread 1 finish"<<endl;

}
void B(){
    unique_lock<mutex>lk(mtx);
    int count=0;
    while(count<10){
        while(flag!=1) cv.wait(lk);
        cout<<"thread 2 : b"<<endl;
        this_thread::sleep_for(chrono::milliseconds(500));
        flag=2;
        cv.notify_all();
        count++;
    }
    cout<<"thread 2 finished"<<endl;

}
void C(){
    unique_lock<mutex>lk(mtx);
    int count=0;
    while(count<10){
        while(flag!=2) cv.wait(lk);
        cout<<"thread 3 : c"<<endl;
        this_thread::sleep_for(chrono::milliseconds(500));
        flag=0;
        cv.notify_all();
        count++;
    }
    cout<<"thread 3 finished"<<endl;

}
int main(){
    thread t1(A);
    thread t2(B);
    thread t3(C);
    t1.join();
    t2.join();
    t3.join();
    return 0;

}

结果

相关推荐
任子菲阳44 分钟前
学Java第四十五天——斗地主小游戏创作
java·开发语言·windows
缪懿1 小时前
JavaEE:多线程基础,多线程的创建和用法
java·开发语言·学习·java-ee
Boop_wu1 小时前
[Java EE] 多线程 -- 初阶(2)
java·开发语言·jvm
IT_Beijing_BIT1 小时前
Rust入门
开发语言·后端·rust
青山的青衫2 小时前
【Java基础07】链表
java·开发语言·链表
麦麦鸡腿堡2 小时前
Java事件处理机制
java·开发语言·python
Elias不吃糖2 小时前
epoll 事件全集、每个事件的含义、哪些事件在实际服务器中最常见、哪些会组合出现
linux·c++·event
AA陈超2 小时前
ASC学习笔记0017:返回此能力系统组件的所有属性列表
c++·笔记·学习·ue5·虚幻引擎
5***79002 小时前
Swift进阶
开发语言·ios·swift
独自破碎E2 小时前
从括号匹配到字符串解码:递归思想的巧妙应用
android·java·开发语言