首页 > 编程语言 >C++多线程Multithreading std::condition_variable

C++多线程Multithreading std::condition_variable

时间:2023-09-27 16:27:13浏览次数:38  
标签:std isOdd 多线程 Multithreading lock mtx num include

多线程Multithreading

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

std::mutex mtx;
std::condition_variable cv;
bool isOdd = true;

void printOdd() {
    for (int i = 1; i <= 100; i += 2) {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock, [] { return isOdd; });
        std::cout << i << std::endl;
        isOdd = false;
        cv.notify_all();
    }
}

void printEven() {
    for (int i = 2; i <= 100; i += 2) {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock, [] { return !isOdd; });
        std::cout << i << std::endl;
        isOdd = true;
        cv.notify_all();
    }
}

int main() {
    std::thread t1(printOdd);
    std::thread t2(printEven);
    
    t1.join();
    t2.join();
    
    return 0;
}
#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx;
int num = 1;

void printNumbers(bool isOdd) {
    while (num <= 100) {
        if ((num % 2 == 1) == isOdd) {
            std::unique_lock<std::mutex> lock(mtx);
            std::cout << num << std::endl;
            num++;
        }
    }
}

int main() {
    std::thread t1(printNumbers, true);  // 打印奇数
    std::thread t2(printNumbers, false); // 打印偶数

    t1.join();
    t2.join();

    return 0;
}
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

std::mutex mtx;
std::condition_variable cv;
int num = 1;

void printNumbers(bool isOdd) {
    while (num <= 100) {
        std::unique_lock<std::mutex> lock(mtx);
        // Wait for the condition to be met (isOdd for t1, !isOdd for t2)
        cv.wait(lock, [isOdd] { return (num % 2 == 1) == isOdd; });
        std::cout << num << std::endl;
        num++;
        cv.notify_all(); // Notify other thread to proceed
    }
}

int main() {
    std::thread t1(printNumbers, true);  // Print odd numbers
    std::thread t2(printNumbers, false); // Print even numbers

    t1.join();
    t2.join();

    return 0;
}

标签:std,isOdd,多线程,Multithreading,lock,mtx,num,include
From: https://www.cnblogs.com/qianxinn/p/17732966.html

相关文章

  • 多线程
    一、什么是线程线程(Thread)也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线......
  • 二张图解释什么是DevOps、TestOps、TestDev
    DevOpswikipedia解释:DevOps是一种软件工程文化和实践,旨在统一软件开发(Dev)和软件运维(Ops)。DevOps运动的主要特点是在软件构建的所有步骤中极力提倡自动化和监控,从集成、测试、发布到部署和基础设施管理。DevOps的目标是缩短开发周期,增加部署频率,更可靠的发布,与业务目标紧密结合......
  • Java多线程--Lesson03
    线程同步概念:线程同步指的是在多个线程操作同一资源时,需要通过线程排队和线程锁来约束这些线程,使得其可以对其资源完成同步并发指的是同一时间段内,有多个线程去操作同一个资源文件由于同一进程的多个线程共享一块空间资源,带来方便的同时也带来了冲突问题,为了保证数据在方法中......
  • 库函数 | C++17 std::filesystem文件系统 用法指北
    本文将针对常用的场景,对std::filesystem的使用逐一进行验证:判断文件夹是否存在创建单层目录逐级创建多层目录创建多级目录当前文件路径创建文件"from.dat"获取相对于base的绝对路径文件拷贝移动文件或重命名创建文件“example.dat”获取文件大小获取文件最后修改......
  • 多线程Review-926-01
    一、进程与线程1、进程:①电脑管家等软件我们运行的应用程序②在内存中正在运行的程序2、线程:①进程中的一个最小执行单元。一个进程最少得有一个线程②软件中的每一个功能,如电脑管家中的清理垃圾、杀毒、软件搜索二、线程的创建方式1、继承Thread类  :优点——代码......
  • 无涯教程-JavaScript - STDEVPA函数
    描述STDEVPA函数根据作为参数给出的总体(包括文本和逻辑值)计算标准偏差。语法STDEVPA(value1,[value2]...)争论Argument描述Required/OptionalValue11到255对应于总体的值。您也可以使用单个数组或对数组的引用,而不要使用以逗号分隔的参数。RequiredValue......
  • 无涯教程-JavaScript - STDEVA函数
    描述STDEVA函数根据样本估算标准偏差。标准偏差是对值与平均值(平均值)的分散程度的度量。语法STDEVA(value1,[value2]...)争论Argument描述Required/OptionalValue11至255个值,对应于总体样本。您也可以使用单个数组或对数组的引用,而不要使用以逗号分隔的参数......
  • 无涯教程-JavaScript - STDEV.P函数
    描述STDEV.P函数根据作为参数给出的总体(忽略逻辑值和文本)来计算标准差。语法STDEV.P(number1,[number2]...)争论Argument描述Required/OptionalNumber1Thefirstnumberargumentcorrespondingtoapopulation.RequiredNumber2...编号参数2到254对应于总体......
  • 细说多线程,如何解决线程安全问题
    关于多线程,首先熟练分清楚线程和进程的关系:进程:内存中正在运行的一个程序线程:进程中的一个最小执行单元。一个进程最少得有一个线程(Java程序中一个请求就是一个线程)。一、创建多线程的方式有四种:1.继承Thread类1.定义一个子类继承Thread类,并重写run方法2.创建Thread的子类对......
  • 多线程
    首先先说一下什么是进程什么事线程,进程就是在内存中正在运行的程序,线程是进程的最小执行单位,一个进程最少得有一个线程,线程是指软件中的每一个功能。    线程的创建方式有三种,继承Thread类,实现Runable接口,实现Callable接口,继承Thread类和实现Runable接口的区别在于,java是单......