私は値を変更しようとしたセマフォを持っていますが、失敗します。 man
のページを読んだ後、値が0より小さく、SETVAL
を使用すると失敗することがわかりました(私は初期化していませんでした)。しかし、私はperror()
を呼び出すと、私はそれを初期化するときに私は "識別子を削除"取得します。 SETALL
またはその組合を指しているかどうかはわかりません。セマフォの初期化
私の初期化が次のようになります。
union semun argument;
unsigned short values[1];
values[0] = 1;
argument.array = values;
int retVal;
//INITIALIZE our semaphore
if(retVal = semctl(semId, 0, SETALL, argument) == -1)
{
perror("semaphore INITIALIZATION failed\n");
exit(1);
}
私は、manページやいくつかの他のウェブサイトのように私の組合を宣言しているので、私はそれを知っていると私はそれがセマフォを返すことを確認するsemget()
後にチェックをしています部品が正しく機能しています。誰かが私がどこに間違っているか教えてもらえれば、私はそれを高く評価します。
誰かが私の誤りの背後にある理由を説明することができれば、間違いからそれが最も有用であることを知ることができます。
おかげ
UPDATE:どうやらそれは
あなたが/ SysVのセマフォを必要としたい理由はありますか? POSIXセマフォは、一般にはるかに優れています(よりsanerなAPIであり、ユーザー空間で実装できるのではるかに高速です)。しかし、非常に強力ではなく、本当の古いシステムでは利用できないかもしれません。 –
いつ、どのように 'semId'を設定しましたか? – alk