首页 > 其他分享 >2023蚂蚁金服/理想/字节/快手面试笔试题——5个线程交叉打印1~100

2023蚂蚁金服/理想/字节/快手面试笔试题——5个线程交叉打印1~100

时间:2023-11-13 20:36:03浏览次数:47  
标签:std jobs 快手 打印 int 线程 2023 include

原题来自牛客网面经。类似这种多线程轮流打印的手撕题会出现很多次,比如以前就看过类似的3个线程轮流打印ABC。

 

关键点在于:怎么设计机制保证这个顺序,至于要打印的数字,肯定是要用互斥量保护起来。

C++代码如下:

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

std::mutex mutex;
std::condition_variable cv;
// 用一个变量来控制该哪个线程打印
int whichToPrint = 0;
int threadCount = 5;

void print(int thread_id) {
    std::unique_lock<std::mutex> lock(mutex);
    int count = 1;
    while (count <= 100) {
        // 如果当前线程还没轮到,就会释放掉lock进入等待状态,等待唤醒
        // 所以这个函数还没结束前,lock是可以被释放给其他线程的
        while (thread_id % threadCount != whichToPrint) {
            cv.wait(lock);
        }
        // 如果获取到lock并且线程id满足条件的话,就会执行下面的代码
        std::cout<<std::this_thread::get_id()<<": "<<count<<std::endl;
        count++;
        whichToPrint++;
        whichToPrint %= threadCount;
        // 已经打印一个数字,通知其他线程
        cv.notify_all();
    }
}

int main() {
    std::vector<std::thread> jobs;
    for (int i = 0; i < threadCount; i++) {
        jobs.emplace_back(print, i);
    }
    for (int i = 0; i < threadCount; i++) {
        jobs[i].join();
    }
    return 0;
}

标签:std,jobs,快手,打印,int,线程,2023,include
From: https://www.cnblogs.com/jolintsai/p/17830079.html

相关文章

  • JVM 里 new 对象时,堆会发生抢占吗?JVM是怎么设计来保证 线程安全的?
    会。假设JVM虚拟机上,每一次new对象时,指针就会向右移动一个对象size的距离,一个线程正在给A对象分配内存,指针还没来得及修改,另一个为对象B分配内存的线程又引用了这个指针来分配内存,这就发生了抢占。有两种方案来解决这个问题:1、CAS采用CAS分配重试的方式来保证更新操作的原子性2、TL......
  • 【pwn】[HGAME 2023 week1]choose_the_seat --数组越界,劫持got表
    查一下程序保护情况发现是partialrelro,说明got表是可以修改的,下一步看代码逻辑看到这一段puts(&seats[16*v0]);存在数组越界的漏洞,因为上面的代码没有对v0进行负数的限制,v0可以是负数,我们来看一下seat的数据可以发现seat上面的数据就是got表,seat到exit的距离只需要传入......
  • 20231113
    @liuzimingc你不说话你会死啊,我昨天写了鲜花的!每天的鲜花就在主页顶置一会儿,第二天就不在主页顶置了,浪费版面,本来就不是什么有意义的东西。上午打了个有点难的联赛,而且打的时候特别头痛。不知道是不是因为光的原因,我打开pdf的时候那个白得发亮的页面把我闪瞎了,上午一段时间视......
  • 2023.11.13 ~ 2023.11.19
    需要知识点以及学习连接:b站视频:前缀和差分本周题目:1、前缀和【模板题】2、前缀和【例题1】3、二维前缀和【模板题】4、差分【模板题】5、差分【例题1】......
  • Nessus 10.6 Auto Installer for macOS Sonoma (updated Nov 2023)
    Nessus10.6AutoInstallerformacOSSonoma(updatedNov2023)发布Nessus试用版自动化安装程序,支持macOSSonoma、RHEL9和Ubuntu22.04请访问原文链接:https://sysin.org/blog/nessus-auto-install-for-macos/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org......
  • 2023-2024-1 20232309 《网络空间安全导论》第10周学习总结
    2023-2024-120232309《网络空间安全导论》第10周学习总结教材学习内容总结说明:由于本章作为“概述”性章节的特殊性,具有大量识记性基础内容(一个不太准确的描述...),许多内容通过教材的分类子目录与解释已经清晰明了,故在思维导图中不做抄写的重复劳动(虽然还是有抄书嫌疑在其中.........
  • 20231113打卡
    今天上午电工基础实训,掌握基本的用电常识,提高我的用电安全意识,锻炼我的实操能力。下午java分级测试,我花了大量时间在后端构建上,前端分配的时间相对少了很多,主要是自己的技能水平不够熟练,勉强B级qwq......
  • 2023/11/13
    <%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><metacharset="UTF-8"><title>模糊查询</title><script>functionsubmitButtonClick(){......
  • 每日总结20231113
    代码时间(包括上课)5h代码量(行):100行博客数量(篇):1篇相关事项:1、今天已经是第十周的周一了,这学期也是度过了一半多的时间了,上午上的第一节课是软件设计模式,写的是外观模式和享元模式。2、今天上午的第二节课上的是人机交互技术,这节课跟着csdn上的文章简单的做了几个界面,也简单的认......
  • 云原生周刊:KubeSphere 3.4.1 发布 | 2023.11.13
    开源项目推荐InspektorGadgetInspektorGadget是一组用于调试和检查Kubernetes资源与应用程序的工具(或小工具)。它在Kubernetes集群中管理eBPF程序的打包、部署和执行,包括许多基于BCC工具的程序,以及一些专为在InspektorGadget中使用而开发的程序。它能自动将低级内......