2016-08-25 7 views
1

は、私が今semgetが、これはそれで多くのセマフォを持っているセマフォセットを作成します私の理解あたりとして

#define SEM_ID 250 
... 
sem_set_id = semget(SEM_ID, 1, IPC_CREAT | 0660); 
if (sem_set_id == -1) { 
perror("main: semget"); 
exit(1); 

を使用してSystem Vセマフォを作成している設定しました。 しかし

int iter=0; 
for(iter=0;iter<no_of_jobs;iter++) 
{ 
    int rc=semctl(semid,iter,SETVAL, sem_val); 
    if(rc==-1) 
     {printf("Error:semctl\n"); 
     exit(1); 
     } 
} 

上記のコードはiter=0のために実行されますが、他のために失敗した... semctl使用してその値を設定するために、特定のセマフォを特定する方法。 struct semun sem_valでは値sem_val.val=1を設定しました。

答えて

1

semget()の2番目の引数は、セマフォセット内のセマフォの数です。 1を指定したので、1つのセマフォを取得しました。 1つのセマフォ以外にアクセスすると、エラーが発生します。

110に変更して、セマフォー0..9以上で繰り返しても問題ありません。

+0

私が1から10に変更すると、semgetがエラーを返します.... –

+0

OK;どのようなエラーが出ますか?システムがより大きなセマフォセットを許可するように設定されていない可能性があります。 2で始まり、それがどれだけ遠くにあるかを見てください。カーネルの構成方法は、システムによって異なります。どのようにして、どのように詳細が非常に変化しているのでしょうか。少なくとも、あなたはどのO/Sを使っているのかを明かす必要があります(例えば、Solaris、Mac OS X、Linuxの答えは全く異なります)。 –

+0

Mac OS Xでは、関連するパラメータのいくつかは次のとおりです: 'kern.sysv.semume = 10'、 ' kern.sysv.semmsl = 87381'、 'kern.sysv.semmnu = 87381'、 ' kern.sysv .semmns = 87381'、 'kern.sysv.semmni = 87381' - それらを取り出すコマンドは' sysctl'です。 –

関連する問題

 関連する問題