首页 > 其他分享 >两个线程交替打印26个字母

两个线程交替打印26个字母

时间:2023-03-18 23:13:52浏览次数:36  
标签:26 return lock 打印 flag 线程 print include cv

代码

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;

mutex mtx;
condition_variable cv;
bool flag = true;

void print(char c)
{
    cout << c << endl;
}

void print_first_half()
{
    for (char c = 'a'; c <= 'z'; c += 2)
    {
        unique_lock<mutex> lock(mtx);
        cv.wait(lock, [](){ return flag; });
        print(c);
        flag = false;
        cv.notify_one();
    }
}

void print_second_half()
{
    for (char c = 'b'; c <= 'z'; c += 2)
    {
        unique_lock<mutex> lock(mtx);
        cv.wait(lock, [](){ return !flag; });
        print(c);
        flag = true;
        cv.notify_one();
    }
}

int main()
{
    thread t1(print_first_half);
    thread t2(print_second_half);

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

    return 0;
}

标签:26,return,lock,打印,flag,线程,print,include,cv
From: https://www.cnblogs.com/JohnRan/p/17232123.html

相关文章

  • 力扣---剑指 Offer 06. 从尾到头打印链表
    输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例1:输入:head=[1,3,2]输出:[2,3,1]限制:0<=链表长度<=10000来源:力扣(LeetCode)链接:https://leetcode......
  • 多线程编程五:信号量
    2.33.信号量的概念_哔哩哔哩_bilibili2.34.信号量的工作机制_哔哩哔哩_bilibili......
  • pat 乙级 1027 打印沙漏
    ac但写得就像坨答辩过两天我自己都忘了这些变量用来干嘛的了1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include<math.h>56int......
  • 华南理工大学软件学院_3181026
    1.构建数据库连接类DBusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Data.SqlClient;usingSystem.Data;namespaceSCUT{......
  • 谈谈你对Java中常用的几种线程池的理解
    为什么使用线程池为每个请求创建一个新线程的开销很大容易引起资源不足,造成浪费使用线程池的风险死锁、资源不足和线程泄漏。死锁当一组进程或线程中的每一个都在......
  • 力扣262(MySQL)-行程和用户(困难)
    题目:表:Trips 表:Users取消率的计算方式如下:(被司机或乘客取消的非禁止用户生成的订单数量)/(非禁止用户生成的订单总数)。写一段SQL语句查出 "2013-10-01" 至......
  • 【LeeCode】26. 删除有序数组中的重复项
    【题目描述】给你一个 升序排列 的数组 ​​nums​​​ ,请你​​ 原地​​ 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 ......
  • 线程池的参数如何设置?(蚂蚁一面)
    核心线程数:如果任务是CPU密集型,即计算任务比较多,可以设置线程数为核心数+1,这样可以让CPU资源得到充分利用。如果任务是IO密集型,即网络请求比较多,可以根据实际情况设......
  • 深入浅出QPS、RT和最佳线程数
    1什么是QPS:QPS是每秒钟处理完请求的次数。这里的请求不是指一个查询或者数据库查询,是包括一个业务逻辑的整个流程,也就是说每秒钟响应的请求次数。2什么是响应时间(RT):......
  • 线程池子线程的终止Shutdown()、ShutdownNow()
    背景之前某需求在触发流控时需要中断ExcutorService中的子线程,发现无论Shutdown、ShutdownNow方法都无法直接停止子线程,今天看到线程的interrupt()方法才了解如何停止。s......