【簡単】1114.シーケンス印刷(*)


【タイトル】public class Foo{public void one(){print("one");public void two() { print(“two”); } public void three() { print(“three”); } } 3つの異なるスレッドは、1つのFooインスタンススレッドAを共有し、one()メソッドスレッドBを呼び出し、two()メソッドスレッドCを呼び出しますthree()メソッドを呼び出します.two()メソッドがone()メソッドの後に実行され、three()メソッドがtwo()メソッドの後に実行されるように、モディファイヤを設計してください.ソース:leetcodeリンク:https://leetcode-cn.com/problems/print-in-order/【例】入力:[1,2,3]出力:「onetwothree」説明:3つのスレッドが非同期起動入力される[1,2,3]は、スレッドAがone()メソッドを呼び出し、スレッドBがtwo()メソッドを呼び出し、スレッドCがthree()メソッドを呼び出し、正しい出力が「onetwothree」であることを示す.【例2】入力:[1,3,2]出力:[onetwothree]解釈:入力[1,3,2]はスレッドAがone()メソッドを呼び出し、スレッドBがthree()メソッドを呼び出し、スレッドCがtwo()メソッドを呼び出すことを示す.【コード】
class Foo {
private:
    mutex m2, m3;
public:
    Foo() {
        m2.lock();
        m3.lock();   
    }
    void first(function<void()> printFirst) {
        printFirst();
        m2.unlock();
    }
    void second(function<void()> printSecond) {
        m2.lock();
        printSecond();
        m3.unlock();
    }
    void third(function<void()> printThird) {
        m3.lock();
        printThird();
        m3.unlock();
    }  
};