2012-03-02 18 views
1

私はセマフォを使用して複数のプロセスが通信しています。sem_closeと処理が終了したときのsem_unlink

sem_open("\name",O_CREATE,S_IRWXU|S_IRWXG,10); 

私は、次のw.r.t 2つの質問があります。今、一つのプロセスがsem_closeまたはsem_unlinkを呼び出さずに突然死んだ場合

  1. を。残りのプロセスはどうなりますか?

  2. sem_close()が呼び出された場合、sem_unlink()は1つのプロセスに対して呼び出されません。他のすべてのプロセスは、sem_close()およびsem_unlink()を呼び出します。すべてのプロセスが終了した後でもセマフォーは存在しますか?ご質問の答え

答えて

1

は:

  1. プロセスが自発的にまたはunvoluntarily、死ぬ、sem_close操作が自動的に行われます。
  2. いいえ、すべてのプロセスが終了し、セマフォがオープンされ、少なくとも1つのプロセスがsem_unlinkを呼び出した場合、セマフォは存在しません。 sem_unlinkという名前のセマフォを削除し、その参照カウントはそれがsem_close呼ばれているか、終了した開かれたすべてのプロセスの後で0になるとセマフォを破壊します:

はビットを展開します。

参考文献:ブック - Unixのネットワークプログラミング・プロセス間通信W.Richardスティーブンス、第2巻によって、CH10