0

マルチスレッドのlibonionライブラリを利用して何かを書いていますが、宣言されたファイルポインタが現在他のスレッドによって読み取られているかどうかをどのように検出するのか疑問に思っていました.

(基本的には、手動で処理される一時ファイルを作成し、誰も読み取っていない場合は削除したいと考えています。)

4

1 に答える 1

0

ファイル ポインターは、ファイル リソースへの単なるポインターであり、他のスレッドがそれを読み取っているかどうかは、ポインターを見るだけでは判断できません。ファイル ポインタと一緒にミューテックスとグローバル ロック カウントを宣言することもできます。スレッドがそれを読み取ろうとするときはいつでも、スレッドがそれ以上ファイルを読み取る意図がない場合に、ロックカウントを減らした後にミューテックスの共有ロックを取得し、ロックカウントを増やして解放することができます。

このロックカウントをクエリして、値がゼロかどうかを確認できます。ゼロの場合は安全に解放できます。

また、このロック カウントはグローバルであり、競合状態になる可能性があるため、ロック カウント変数の読み取りと更新は排他的に行う必要があることに注意してください。

于 2012-04-29T18:05:58.960 に答える