首页 > 其他分享 >【多线程】---1115. 交替打印 FooBar

【多线程】---1115. 交替打印 FooBar

时间:2024-11-11 11:41:38浏览次数:1  
标签:lock foo int FooBar --- printFoo ExeArray 多线程

 

解法1:

condition_variable  +  mutex 

class FooBar {
private:
    int n;
    mutex  mtx;
    condition_variable cv;
    bool foo_done = false;
public:
    FooBar(int n) {
        this->n = n;        
    }

    void foo(function<void()> printFoo) {
        for (int i = 0; i < n; i++) {
            unique_lock<mutex> lock(mtx);
            cv.wait(lock, [&](){return !foo_done;}); // wait 第2个参数,如果你们函数返回结果为false,则在此阻塞
            // printFoo() outputs "foo". Do not change or remove this line.
            printFoo();
            foo_done = true;
            cv.notify_one();
        }
    }

    void bar(function<void()> printBar) {
        for (int i = 0; i < n; i++) {
            unique_lock<mutex> lock(mtx);
            cv.wait(lock, [&](){return foo_done;});
            // printBar() outputs "bar". Do not change or remove this line.
            printBar();
            foo_done = false;
            cv.notify_one();
        }
    }
};

 

解法2:
自定义 n+1 个变量

class FooBar {
private:
    int n;
    int m_ExeArray[2][1001]={0};
public:
    FooBar(int n) {
        this->n = n;        
    }

    void foo(function<void()> printFoo) {
        m_ExeArray[0][0]=1;
        for (int i = 0; i < n; i++) {
            while(!m_ExeArray[0][i]){
                std::this_thread::sleep_for(std::chrono::milliseconds(1));
            }
            // printFoo() outputs "foo". Do not change or remove this line.
            printFoo();
            m_ExeArray[1][i]=1;
        }
    }

    void bar(function<void()> printBar) {
        
        for (int i = 0; i < n; i++) {
            while(!m_ExeArray[1][i]){
                std::this_thread::sleep_for(std::chrono::milliseconds(1));
            }
            // printBar() outputs "bar". Do not change or remove this line.
            printBar();
            m_ExeArray[0][i+1]=1;
        }
    }
};

作者:Henry
链接:https://leetcode.cn/problems/print-foobar-alternately/solutions/2984587/duo-xian-cheng-1115-jiao-ti-da-yin-fooba-kchg/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

标签:lock,foo,int,FooBar,---,printFoo,ExeArray,多线程
From: https://www.cnblogs.com/music-liang/p/18539405

相关文章

  • 连接数据库-mysql
    连接前的三个条件:下载好JDK环境、Mysql、数据库驱动jar包jar包也去MySQL官网上下就可以然后创建数据库,我是在Navicat上建的数据库然后创建的表。也尝试在小黑框那创建了但总出错。跟着up主改配置改了一通up主是成果了,我也没成功。。。、然后在eclipse上新建项目,连上之前下载好......
  • postcss-px-to-viewport 移动端适配
    以前做移动端项目的时候都是用rem来做适配,现在基本上都是通过viewport单位来做。postcss-px-to-viewport就是一个将px单位转换为视口单位的(vw,vh,vmin,vmax)的PostCSS插件,它可以将你CSS中的px单位转化为vw,1vw等于1/100视口宽度。1.安装 javascript代码解读复制......
  • K8s安装ingress-nginx
    安装ingress-nginx问题ingress-nginx-controller的service通过NodePort显露出去时,需要先使用ingree-controller调度到的节点先访问一次,集群的其他节点才能正常访问,如:有master:10.191.9.21,node1:10.191.9.22,node2:10.191.9.23三个节点,ingress-controller调度到了......
  • K-D Tree
    K-DTree细节KDT和树套树并非等价,树套树一般是时间\(O(n\log^2n)\),空间\(O(n\logn)\)的,KDT是时间\(O(n\logn+n\sqrtn)\)(修改+查询),空间\(O(n)\)子树递归时,值域越界判断不要像线段树一样写\(L<=mid,R>mid\),而是转到儿子去写,不然会报错,因为一层只判一个维度,另一个维度可能越界,......
  • 代码语言模型是如何训练的:Qwen2.5-Coder 技术报告学习
    Qwen2.5-Coder是通义千问最新的代码语言模型,基于Qwen2.5的架构继续pretrain了5.5T的token。通过细致的数据清洗、可扩展的合成数据生成和平衡的数据混合,Qwen2.5-Coder在展示令人印象深刻的代码生成能力的同时,还保留了通用的多功能性。本文根据官方的技术报告(Qwen2.5-Coder......
  • SSM城市社区慢性病人信息管理系统-计算机毕业设计源码23699
    目 录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2 城市社区慢性病人信息管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3操作可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功......
  • 上周热点回顾(11.4-11.10)
    热点随笔:· 【故障公告】k8s集群2台32核64G节点服务器被释放造成全站故障 (博客园团队)· 强!34.1Kstar!再见Postman,新一代API测试利器,功能强大、颜值爆表! (狂师)· .NET开发者福音:JetBrains官方宣布Rider非商用免费开放! (追逐时光者)· 又给会员送福利,100台一年华为云......
  • 代码随想录之滑动窗口、Java日期api、集合(11.4-11.11)
    代码1、长度最小的子数组⭐使用滑动窗口的思想,外层循环控制结束位置j,内层循环控制起始位置i,看似是双层循环,但时间复杂度是o(2n)。 2、水果成篮自己想法:使用backet1和backet2表示篮子1和篮子2;使用backet1Account和backet2Account分别表示两个篮子里水果的数量,内层循环将i指针......
  • C小题目-输入10个数,要求输出其中值最大的元素和该数是第几个数
    #include<stdio.h>intmax(intx,inty){returnx>y?x:y;};intmain(){inta[10];inti,m,n;for(i=0;i<10;i++){printf("请输入第%d个数:",i);scanf("%d",&a[i]);};for(i=0,m=a[0],n=......
  • 【软考】系统架构设计师-2017年下半年下午论文真题及答案
    全国计算机技术与软件专业技术资格(水平)考试高级系统架构设计师2017年下半年下午试卷 论文  试题一 论软件架构风格软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约......