0

読み取りまたは書き込み中に共有メモリとセマフォを使用してロックする簡単なプログラムを作成しています。プログラムが終了したら、すべての共有メモリとセマフォを削除する必要があります。関数 seminit、semrm、semgrab、semdown、semup を実装する独自の sem ライブラリを取得しました。プログラムは動作していますが、セマフォの削除部分については不明です。

すべてのセマフォは最後に削除する必要があるため、プログラムが複数回呼び出されている間、いつ削除すればよいですか? つまり、それらがまだ使用されている間はそれらを削除しないようにする必要があります。まだ使用されているかどうかを確認する可能性はありますか?

この問題にどう対処すればよいかわかりません。

簡単な問題の要約: programm が複数回呼び出され、最後にセマフォを削除する必要があります。それを処理する必要があるのは 1 つのプログラムのみであり、別のプログラムがクリーンアップする必要はありません。

4

1 に答える 1

-1

ライブラリとセマフォの使用方法の詳細がなければ、Singleton パターンと参照カウントの組み合わせを使用します。

シングルトン パターンの説明は、ウィキペディアにあります:シングルトン パターン

セマフォをシングルトンにし、割り当てられたセマフォのインスタンス数を追跡する変数を追加します。メソッド内の変数をインクリメントしますgetInstance()releaseInstance()次に、カウンターをデクリメントするメソッドをセマフォ クラスに 追加します。releaseInstance()プログラムがセマフォを使用して終了したときに呼び出されます。次に、参照カウントが 0 かどうかを確認するメソッドを追加しisInUse()ます。0 の場合は、セマフォを削除できます。

したがって、プログラムは次のようになります。

mySemaphore.releaseInstance();
if(mySemaphore.isInUse() != true) {
    delete mySemaphore;
}
else {
    // Do nothing since it is a Singleton, and someone else is using it.
    // i.e. - We don't need to delete anything.
}
于 2013-01-12T17:54:23.907 に答える