1

セマフォ セットの 4 つのセマフォで semget を開けないのはなぜですか? すなわち:

semget(key_t key, int nsems, int semflg); 

上記の関数を nsms を 3 として呼び出すと問題ありませんが、4 を指定するとマイナス 1 が返されます。

int sempahore = semget((key_t)key,4,IPC_CREAT | MY_PERMS);

上記のコードは、4 を 3 に変更した場合にのみ機能します

それ以外の場合、errno は無効な引数を返します

4

1 に答える 1

3

Linux ボックスのマニュアル ページによると、「nsems が 0 未満であるか、セマフォ セットごとのセマフォ数の制限 (SEMMSL) を超えているか、キーに対応するセマフォ セットが既に存在し、nsems が大きい場合にsemget返される可能性があります。EINVALそのセット内のセマフォの数よりも。」

2 番目のケースに当てはまっていると思われます。同じキーとセット内の 3 つのセマフォを持つセットを既に作成しているかどうかを確認してください。

于 2013-03-12T23:51:23.967 に答える