1. ホーム
  2. c++

[解決済み】 std::lock_guard と std::scoped_lock どっちがいい?

2022-04-16 19:33:16

質問

C++17 では、新しいロッククラスである std::scoped_lock .

ドキュメントから判断すると、すでに存在する std::lock_guard クラスがあります。

何が違うのか、どんな時に使えばいいのか?

どのように解決するのですか?

唯一かつ重要な違いは std::scoped_lock は、複数のミューテックスを受け取るバリアディックコンストラクタを持っています。これにより、複数のミューテックスをロックしてデッドロックを回避することができます。 std::lock を使用した。

{
    // safely locked as if using std::lock
    std::scoped_lock<std::mutex, std::mutex> lock(mutex1, mutex2);     
}

以前は、複数の Mutex を安全にロックするために std::lock の説明のとおりです。 この答え .

スコープロックを追加することで、より使いやすくなり、関連するエラーも回避することができます。を考えることができます。 std::lock_guard は非推奨です。の引数が1つの場合は std::scoped_lock は特殊化として実装することができますので、パフォーマンスの問題を心配する必要はありません。

GCC 7 では、すでに std::scoped_lock を見ることができます。 こちら .

より詳細な情報は 規格書