2

[thread.mutex.recursive] の引用:

オブジェクトを所有するスレッドは、そのオブジェクトに対してまたはをrecursive_mutex呼び出すことによって、追加レベルの所有権を取得できます。1 つのスレッドが取得できる所有権レベルの数は指定されていません。スレッドがオブジェクトの最大レベルの所有権を既に取得している場合、 への追加の呼び出しは失敗し、 への追加の呼び出しは type の例外をスローします。lock()try_lock()recursive_mutextry_lock()lock()system_error

「所有権の最大レベル」に 1 より大きい下限はありますか? 再帰的な pthread ミューテックスはどうですか?

4

1 に答える 1

0

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

古い基準 (CI の考え) では、このようなことに対してより低い制限を提供するために使用されていました。その結果、これらの下限を超えて使用できないというコーディング標準が作成されました。例: 等価性を比較する際に、外部シンボルの何文字が有意であるかは実装によって定義されていました (そして、今もそうだと思います)。したがってa_very_very_long_name_indeed_with_extra_padding、 とa_very_very_long_name_indeed_with_extra_paddingXは同じ記号として扱われる場合があります。最小長は 8 と指定され、コーディング標準は「外部シンボルの最大長は 8 文字」と指定して記述されました。

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

于 2016-05-13T09:11:39.150 に答える