マルチスレッドプログラミングの交互印刷(leetcode 1115)


タイトル
クラスを提供します.
class FooBar {
  public void foo() {
    for (int i = 0; i < n; i++) {
      print("foo");
    }
  }

  public void bar() {
    for (int i = 0; i < n; i++) {
      print("bar");
    }
  }
}

2つの異なるスレッドは、1つのFooBarインスタンスを共有します.1つのスレッドはfoo()メソッドを呼び出し、もう1つのスレッドはbar()メソッドを呼び出します.「foobar」がn回出力されるように修正プログラムを設計してください.

例1:
  : n = 1
  : "foobar"
  :             。       foo()   ,       bar()"foobar"

例2:
  : n = 2
  : "foobarfoobar"
  : "foobar"

コード#コード#
class FooBar {
private:
    int n;
    std::mutex m1,m2;

public:
    FooBar(int n) {
        this->n = n;
        m2.lock();
    }

    void foo(function<void()> printFoo) {
        
        for (int i = 0; i < n; i++) {
            m1.lock(); //        
        	printFoo();
            m2.unlock();
        }
        
    }

    void bar(function<void()> printBar) {
        
        for (int i = 0; i < n; i++) {
            m2.lock(); 
        	printBar();
            m1.unlock();
        }
        
    }
};

参考資料:力ボタン(LeetCode)