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から10に変更すると、semgetがエラーを返します.... –
OK;どのようなエラーが出ますか?システムがより大きなセマフォセットを許可するように設定されていない可能性があります。 2で始まり、それがどれだけ遠くにあるかを見てください。カーネルの構成方法は、システムによって異なります。どのようにして、どのように詳細が非常に変化しているのでしょうか。少なくとも、あなたはどのO/Sを使っているのかを明かす必要があります(例えば、Solaris、Mac OS X、Linuxの答えは全く異なります)。 –
Mac OS Xでは、関連するパラメータのいくつかは次のとおりです: 'kern.sysv.semume = 10'、 ' kern.sysv.semmsl = 87381'、 'kern.sysv.semmnu = 87381'、 ' kern.sysv .semmns = 87381'、 'kern.sysv.semmni = 87381' - それらを取り出すコマンドは' sysctl'です。 –