1

http://preshing.com/20120305/implementing-a-recursive-mutexhttp://en.wikipedia.org/wiki/Reentrant_mutexで再帰的 (再入可能) ミューテックスに関する 2 つの記事を読みましたが、どちらの記事も何もしませんでした。検出。

誰かが再帰的(再入可能)ミューテックスがどのように機能するかを説明できますか?

(再帰ミューテックスがどのように機能するかを説明する資料はほとんど見つかりませんでした。誰かが適切な説明とリンクしている場合は、この質問を閉じます。)

ありがとう !

4

1 に答える 1

1

これを行う簡単な方法の 1 つは、標準ミューテックスを次の補助情報とペアにすることです。

  • ミューテックスを所有する (またはNULL取得されていない場合) スレッドへのポインター、および
  • 最初は 0 のカウンター。

次に、次の方法でミューテックスを取得できます。

  • あなたが現在のミューテックスの所有者である場合は、カウンターをインクリメントしてすぐに戻ります。
  • そうでない場合は、mutex を取得し、カウンターを 0 に設定します。

つまり、既にミューテックスを所有している場合は、カウンターをインクリメントするだけで、それをさらに所有していることを示します。そうでない場合は、通常どおりミューテックスを取得します。

その後、次の方法でミューテックスを解放できます。

  • カウンターがゼロ以外の場合、カウンターをデクリメントしてすぐに戻ります。
  • それ以外の場合は、ミューテックスを解放します。

これを機能させるには、カウンターとミューテックスの所有者をスレッドセーフな方法で読み取ることができる必要があります。これを行うには、それを保護するためのセカンダリ ミューテックスを用意するか、 counter / owner をマークしvolatileます。

お役に立てれば!

于 2013-04-08T23:53:04.717 に答える