c ++ 11 std :: lockとstd :: scoped_lockに少なくとも2つのパラメーターが必要なのはなぜですか?

Troskyvs

これらの2つのユーティリティには少なくとも2つのパラメーターが必要であることがわかりました。たとえば、ロックするには2つのミューテックスが必要です。

このようにする必要があります(cppreference.comから):

void assign_lunch_partner(Employee &e1, Employee &e2)
{
    static std::mutex io_mutex;
    {
        std::lock_guard<std::mutex> lk(io_mutex);
        std::cout << e1.id << " and " << e2.id << " are waiting for locks" << std::endl;
    }

    {
        std::scoped_lock lock(e1.m, e2.m);
    }
}

少なくとも2つのパラメータを要求することは意味がありますか?設計上の考慮事項は何でしたか、詳細を知りたいです。

どうもありがとう。

ユニコーン

2つ必要ありません。1つ以上をロックできます

cppreferenceページからあなたは(私の強調)からあなたの例を取りました:

クラスscoped_lockは、スコープブロックの期間中に1つ以上のミューテックス所有するための便利なRAIIスタイルのメカニズムを提供するミューテックスラッパーです

std::scoped_lockは、複数のミューテックスを取得するための便利なユーティリティです。内部でデッドロック回避メカニズムを使用しますC ++ 11とC ++ 14には、しかstd::lock()ありませんでしたが、RAIIメカニズムではありません(ミューテックスのロックを自動的に解除しません)。

std::scoped_lock単一のミューテックスで使用することもでき、それはと同等になりますstd::lock_guard

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++ 11では、クラスメンバーとしてstd :: unique_lock <std :: mutex>を使用するのが賢明(または安全)ですか?もしそうなら、ガイドラインはありますか?

分類Dev

C ++ 11では、クラスメンバーとしてstd :: unique_lock <std :: mutex>を使用するのが賢明(または安全)ですか?もしそうなら、ガイドラインはありますか?

分類Dev

std :: stringをソートするときに、C ++ 11 std :: sort()が高速でないのはなぜですか?

分類Dev

C ++ std :: lockとstd :: unique_lockの違いは何ですか?

分類Dev

std :: scoped_lockのミューテックスの順序が異なるとパフォーマンスに影響するのはなぜですか?

分類Dev

-std = c ++ 11と-std = gnu ++ 11の違いは何ですか?

分類Dev

C ++ 11のstd :: initializer_listに対してstd :: begin()とstd :: end()がオーバーロードされるのはなぜですか?

分類Dev

関数から呼び出されたときにc ++ 11 std :: normal_distributionが同じパターンを返すのはなぜですか?

分類Dev

C ++ 11:コンパイラが{}をstd :: initializer_listと見なすのはいつですか?

分類Dev

C ++ 11はstd :: unique_lock <std :: mutex>をラムダに渡します

分類Dev

C#インデクサーには少なくとも1つのパラメーターが必要です

分類Dev

C ++ 11 std :: unique_lockをロックするとデッドロック例外が発生する

分類Dev

C ++ 11 std :: threadsとposixスレッド

分類Dev

std = c ++ 11とstd = gnu ++ 11のC ++標準正規表現の違い

分類Dev

-std = c ++ 0xと-std = c ++ 11の違いは何ですか

分類Dev

c ++ 11では、std :: moveの後にmoved変数を使用する権利がないのはなぜですか?

分類Dev

C ++ 11 std :: threadの奇妙な動作

分類Dev

C ++演算子のオーバーロードで、「クラス型のパラメーターが少なくとも1つある」必要があるのはなぜですか。

分類Dev

c ++ 11 std :: threadはストリーム出力のものを使用しますが、何も得られません。なぜですか?

分類Dev

gcc -std = c11でgets()を使用できるのはなぜですか?

分類Dev

C ++ std :: variantとstd :: any

分類Dev

コンパイル時に毎回-std = c ++ 11と入力する必要がないようにするにはどうすればよいですか。

分類Dev

C ++-C ++ 11 std :: arrayを返します

分類Dev

g ++が-std = c ++ 11を使用して<algorithm>をコンパイルするのにはるかに長い時間がかかるのはなぜですか?

分類Dev

g ++が-std = c ++ 11を使用して<algorithm>をコンパイルするのにはるかに長い時間がかかるのはなぜですか?

分類Dev

C ++ 11とC ++ 03は、std :: stringの小さな文字列の最適化のサポートが異なりますか?

分類Dev

C ++ 11がstd :: string :: data()にnull終了文字を追加させたのはなぜですか?

分類Dev

`std :: basic_ifstream <char16_t>`がc ++ 11で機能しないのはなぜですか?

分類Dev

std = c11argでのGCC警告

Related 関連記事

  1. 1

    C ++ 11では、クラスメンバーとしてstd :: unique_lock <std :: mutex>を使用するのが賢明(または安全)ですか?もしそうなら、ガイドラインはありますか?

  2. 2

    C ++ 11では、クラスメンバーとしてstd :: unique_lock <std :: mutex>を使用するのが賢明(または安全)ですか?もしそうなら、ガイドラインはありますか?

  3. 3

    std :: stringをソートするときに、C ++ 11 std :: sort()が高速でないのはなぜですか?

  4. 4

    C ++ std :: lockとstd :: unique_lockの違いは何ですか?

  5. 5

    std :: scoped_lockのミューテックスの順序が異なるとパフォーマンスに影響するのはなぜですか?

  6. 6

    -std = c ++ 11と-std = gnu ++ 11の違いは何ですか?

  7. 7

    C ++ 11のstd :: initializer_listに対してstd :: begin()とstd :: end()がオーバーロードされるのはなぜですか?

  8. 8

    関数から呼び出されたときにc ++ 11 std :: normal_distributionが同じパターンを返すのはなぜですか?

  9. 9

    C ++ 11:コンパイラが{}をstd :: initializer_listと見なすのはいつですか?

  10. 10

    C ++ 11はstd :: unique_lock <std :: mutex>をラムダに渡します

  11. 11

    C#インデクサーには少なくとも1つのパラメーターが必要です

  12. 12

    C ++ 11 std :: unique_lockをロックするとデッドロック例外が発生する

  13. 13

    C ++ 11 std :: threadsとposixスレッド

  14. 14

    std = c ++ 11とstd = gnu ++ 11のC ++標準正規表現の違い

  15. 15

    -std = c ++ 0xと-std = c ++ 11の違いは何ですか

  16. 16

    c ++ 11では、std :: moveの後にmoved変数を使用する権利がないのはなぜですか?

  17. 17

    C ++ 11 std :: threadの奇妙な動作

  18. 18

    C ++演算子のオーバーロードで、「クラス型のパラメーターが少なくとも1つある」必要があるのはなぜですか。

  19. 19

    c ++ 11 std :: threadはストリーム出力のものを使用しますが、何も得られません。なぜですか?

  20. 20

    gcc -std = c11でgets()を使用できるのはなぜですか?

  21. 21

    C ++ std :: variantとstd :: any

  22. 22

    コンパイル時に毎回-std = c ++ 11と入力する必要がないようにするにはどうすればよいですか。

  23. 23

    C ++-C ++ 11 std :: arrayを返します

  24. 24

    g ++が-std = c ++ 11を使用して<algorithm>をコンパイルするのにはるかに長い時間がかかるのはなぜですか?

  25. 25

    g ++が-std = c ++ 11を使用して<algorithm>をコンパイルするのにはるかに長い時間がかかるのはなぜですか?

  26. 26

    C ++ 11とC ++ 03は、std :: stringの小さな文字列の最適化のサポートが異なりますか?

  27. 27

    C ++ 11がstd :: string :: data()にnull終了文字を追加させたのはなぜですか?

  28. 28

    `std :: basic_ifstream <char16_t>`がc ++ 11で機能しないのはなぜですか?

  29. 29

    std = c11argでのGCC警告

ホットタグ

アーカイブ