値を変更しようとしたセマフォがあり、失敗しました。このページを読んだ後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ページや他のいくつかのWebサイトと同じように共用体を宣言し、後でsemget()
セマフォが返されることを確認して、その部分が正しく機能していることを確認しています。誰かが私が間違っている場所を教えてくれたら、とても感謝しています。
また、誰かが私の間違いから学ぶことができるように、私のエラーの背後にある理由を説明していただければ、それが最も役立つでしょう.
ありがとう
更新:どうやらそれが気に入らなかった== -1
ので、に変更したところ< 0
、うまく機能しましたが、すべての応答に感謝します