3

inを使用named semaphoreして、複数のプロセスにわたる共有メモリのアクセスを制御しています。今のところ、セマフォにコードを追加していません。だから私の質問は:CLinuxsem_closesem_unlink

名前付きセマフォは、それを使用するすべてのプロセスが終了すると自動的に破棄されますか?

はいの場合、電話をかけなくても大丈夫sem_closeですsem_unlinkか?

4

2 に答える 2

4

http://linux.die.net/man/7/sem_overview

「POSIX 名前付きセマフォにはカーネル永続性があります。sem_unlink(3) によって削除されない場合、システムがシャットダウンされるまでセマフォは存在します。」

于 2013-06-12T10:50:57.097 に答える
1

man ページhttp://pubs.opengroup.org/onlinepubs/7908799/xsh/sem_close.htmlから

sem_close() 関数は、sem によって示される名前付きセマフォを使用して、呼び出しプロセスが終了したことを示すために使用されます。名前のないセマフォ (sem_init() によって作成されたもの) に対して sem_close() を呼び出した場合の効果は未定義です。sem_close() 関数は、このセマフォのこのプロセスで使用するためにシステムによって割り当てられたすべてのシステム リソースの割り当てを解除します (つまり、このプロセスによる後続の sem_open() で再利用できるようにします)。このプロセスによって sem によって示されるセマフォがその後使用された場合の影響は定義されていません。sem_unlink() の呼び出しが成功してセマフォが削除されていない場合、sem_close() はセマフォの状態に影響を与えません。

If the sem_unlink() function has been successfully invoked for name after the most recent call to sem_open() with O_CREAT for this semaphore, then when all processes that have opened the semaphore close it, the semaphore is no longer be accessible.

したがって、本質的に、セマフォを開いたすべてのプロセスが sem_unlink と sem_close を正常に呼び出すと、セマフォは破棄されます。

于 2013-06-12T10:51:18.413 に答える