5

C1x ミューテックス (§7.25.4) について次の質問があります。

ブロックする代わりにmtx_lock()戻ることができるのはどのような状況ですか? thrd_busyどのような状況でmtx_timedlock()戻ることができthrd_busyますか?

thrd_busy§7.25.1 ¶5 で、「テストおよびリターン関数によって要求されたリソースが既に使用されている場合に返される」と定義されていることに注意してください。

によってのみ返されるか、またはまたはミューテックスで呼び出された場合にthrd_busyのみ返されると予想されますが、タイムアウトをサポートするミューテックス、つまりまたはミューテックスを必要とするからは絶対に返されません。mtx_trylock()mtx_lock()mtx_trymtx_try | mtx_recursivemtx_timedlock()mtx_timedmtx_timed | mtx_recursive

これはドラフトの見落としですか?または、何か不足していますか?

4

2 に答える 2

10

ミューテックスが再帰的ではなく、再帰的な方法でロックしようとした場合、動作は未定義です。ただし、実装はこれを検出して返すことができますthrd_busy。(または、永久にブロックするか、または を返すthrd_errorthrd_success、ハードディスクをフォーマットする可能性があります.....)

于 2011-06-27T10:04:18.263 に答える