• Leetcode 1114. 按序打印


    在这里插入图片描述
    给你一个类:

    public class Foo {
      public void first() { print("first"); }
      public void second() { print("second"); }
      public void third() { print("third"); }
    }
    

    三个不同的线程 A、B、C 将会共用一个 Foo 实例。

    • 线程 A 将会调用 first() 方法
    • 线程 B 将会调用 second() 方法
    • 线程 C 将会调用 third() 方法

    请设计修改程序,以确保 second() 方法在 first() 方法之后被执行,third() 方法在 second() 方法之后被执行。

    提示:

    • 尽管输入中的数字似乎暗示了顺序,但是我们并不保证线程在操作系统中的调度顺序。
    • 你看到的输入格式主要是为了确保测试的全面性。

    示例 1:

    输入:nums = [1,2,3]
    输出:"firstsecondthird"
    解释:
    有三个线程会被异步启动。输入 [1,2,3] 表示线程 A 将会调用 first() 方法,线程 B 将会调用 second() 方法,线程 C 将会调用 third() 方法。正确的输出是 "firstsecondthird"。
    

    示例 2:

    输入:nums = [1,3,2]
    输出:"firstsecondthird"
    解释:
    输入 [1,3,2] 表示线程 A 将会调用 first() 方法,线程 B 将会调用 third() 方法,线程 C 将会调用 second() 方法。正确的输出是 "firstsecondthird"。
     
    

    提示:

    • nums 是 [1, 2, 3] 的一组排列

    主要思路:利用queue-先进先出特性

    Code:

    class Foo {
    public:
        Foo() {
            que.push(1);
            que.push(2);
            que.push(3);
        }
        
        void first(function<void()> printFirst) {
            
            
            
            // printFirst() outputs "first". Do not change or remove this line.
            printFirst();
            que.pop();
            
            
        }
        
        void second(function<void()> printSecond) {
            
            // printSecond() outputs "second". Do not change or remove this line.
            
            
            while(1)
            {
                while(que.front()==2)
                {
                    printSecond();
                    que.pop();
                    return ;
                }
            }
            
        }
        
        void third(function<void()> printThird) {
            
            // printThird() outputs "third". Do not change or remove this line.
            while(1)
            {
                while(que.front()==3)
                {
                    printThird();
                    que.pop();
                    return ;
                }
            }
        }
        
        
        
        
    private:
        queue<int>que;
    };
    
    
  • 相关阅读:
    函数获取常用路径 SHGetSpecialFolderLocation、SHGetPathFromIDList
    [转载]Delphi线程池(Delphi2009以上版本适用)
    给 System.Zip 增长了个(多文件解压时的)解压进度事务
    sql操蛋的孤独账号。
    不错的几个jq控件
    jquery的跨域访问
    MVC3中输出Html标签的方法
    MVC_HtmlHelper用法大全
    execute sp_executesql 用变量获取返回值
    Asp.Net MVC中的RenderPartial 和 RenderAction
  • 原文地址:https://www.cnblogs.com/xiaohai123/p/16283305.html
Copyright © 2020-2023  润新知