マルチスレッドプログラミングの交互印刷(leetcode 1115)
タイトル
クラスを提供します.
2つの異なるスレッドは、1つのFooBarインスタンスを共有します.1つのスレッドはfoo()メソッドを呼び出し、もう1つのスレッドはbar()メソッドを呼び出します.「foobar」がn回出力されるように修正プログラムを設計してください.
例
例1:
例2:
コード#コード#
参考資料:力ボタン(LeetCode)
クラスを提供します.
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)