2
私は2つのプロセスを相互に排除しながら共通変数を変更しようとしています。私はこのコードの一部を形成する期待出力がcでセマフォを持つクリティカルセクション
またはですが、私は私が入る前にスリープ状態にプロセスを入れて試してみた 1.
を得続けます重要なセクションですが、常に同じペースですべてのステップを実行し、クリティカルセクションを一緒に入力しています。どうすれば修正できますか?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/sem.h>
#include <sys/ipc.h>
#include <sys/shm.h>
static struct sembuf buf;
void enter(int semid, int semnum){
buf.sem_num = semnum;
buf.sem_op = 1;
buf.sem_flg = 0;
if (semop(semid, &buf, 1) == -1){
perror("Opening semaphore");
exit(1);
}
}
void leave(int semid, int semnum){
buf.sem_num = semnum;
buf.sem_op = -1;
buf.sem_flg = 0;
if (semop(semid, &buf, 1) == -1){
perror("Closing semaphore");
exit(1);
}
}
int main(int argc, char* argv[]){
int semid;
int i=0;
semid = semget(45281, 1, IPC_CREAT|0600);
if (semid == -1){
perror("Creating array of sems");
exit(1);
}
if (semctl(semid, 0, SETVAL, (int)1) == -1){
perror("Setting value to 1");
exit(1);
}
fork();
enter(semid,0);
i++;
leave(semid, 0);
printf("%d\n",i);
}
変数iを格納するために共有メモリメカニズムを使用する必要がありますか? –
はい、親プロセスと子プロセスの間で変数を共有する必要があります。 http://stackoverflow.com/questions/13274786/how-to-share-memory-between-process-fork – Jay
完璧、ありがとう!を参照してください! –