2016-05-13 2 views
2

recursive_mutexの最大所有権レベルの下限? <a href="http://eel.is/c++draft/thread.mutex.recursive#3" rel="nofollow">[thread.mutex.recursive]</a>を引用

そのオブジェクトにlock()又はtry_lock()を呼び出すことにより、所有権の追加レベルを取得してもよいrecursive_mutexオブジェクトを所有するスレッド。これは、所有権のレベルを1つのスレッドでいくつ獲得できるかは不明です。スレッドがすでにrecursive_mutexオブジェクトの最大所有権レベルを取得している場合は、try_lock()への追加呼び出しは失敗し、lock()への追加呼び出しでは、タイプsystem_errorの例外がスローされます。

最大所有権」の下限は1よりも大きいですか?再帰的なpthread mutexはどうでしょうか?

+0

[不定期] http://stackoverflow.com/questions/2397984/undefined実装で定義されていない動作)(標準では特定の値を指定する必要はなく、実装ではこれを記録する必要はありません)。 –

+0

これは、基本的にはリファレンスカウンタに関するものであり、少なくとも32ビットのintではない理由が(ほとんどの状況で)あまりないように見えます。だから、すべての目的と目的のために、私はあなたが実際に必要とする以上の限界を考慮します。 –

+0

しかし、大きな質問です。下限が与えられていないという事実はおそらく標準の欠陥です。 –

答えて

0

この規格には下限はありません。これはおそらく意図的なものです。

このようなものには、より古い制限を提供するために古い標準(Cの考え)が使用されました。その結果、人々はこれらの下限を超えて使うことはできないというコーディング基準を書いていました。例:それは、同等であるかどうかを比較するときに、外部シンボルのいくつの文字が重要であったかを実装が定義していた(と私はまだ考えている)実装でした。従ってa_very_very_long_name_indeed_with_extra_paddinga_very_very_long_name_indeed_with_extra_paddingXは同じシンボルとして扱われるかもしれません。最小長は8と指定され、「外部シンボルの最大長は8文字です」を指定してコーディング標準が書かれました。

この値の下限については、次のように考えてください。カウントが他のフィールドにビットパックされていて、全体を適切な命令でアトミックに更新できると容易に想像できます。このように、32ビット未満の場合があります。 (実際には、呼び出しスタックの最大深度が十分に大きくなければならないため、制約のある環境では31が十分に機能する可能性があります)。

関連する問題