RAIIはリソースクリーンアップに適したソリューションです。ただし、RAIIはスタックの巻き戻しに基づいています。プロセスが異常終了した場合、スタックは巻き戻されません。これはRAIIがこのような状況では動作しないことを意味します。プロセス寿命のリソースについては、何も心配する必要はありませんが、ファイル、メッセージキュー、セマフォ、共有メモリなど、ファイルシステムのライフタイムやカーネルのライフタイムリソースにとっては問題になります。RAIIとシステムリソースのクリーンアップ
信頼性の高い方法でシステム(fsおよびkernal)リソースをクリーンアップするにはどうすればよいですか?
例: 共有ファイルは "master"プロセスで作成され、 "slave"プロセスで使用されます。共有ファイルは、計画中の「マスタ」プロセスによって削除する必要があります。これを行う方法が存在するのでしょうか?
明らかに、共有ファイルを作成した後すぐにリンク解除することはできません。その場合、他のプロセスはファイルを「見る」ことができません。
ありがとうございました。プロセスは、システムリソースが他のプロセスによって使用されているかどうかを知っていますか?システムリソースの安全をどのようにクリーンアップできますか? – zhenjing
リソース(ファイル、セマフォ、メッセージキューなど)が使用中であるかどうかを問い合わせる方法はわかりません。しかし、共有メモリセグメントやセマフォを含む現代のPOSIXバージョンのほとんどは、ファイルのように、使用中は「リンク解除」することができます。したがって、最後のプロセスがハンドルを閉じる(または終了すると自動的にハンドルを閉じる)とき、カーネルはリソースを自動的に再要求します。 – Nemo
新しい質問をする:http://stackoverflow.com/questions/6687567/does-a-process-know-whether-a-system-resource-is-used-by-other-process-how-can-i – zhenjing