この 2 つのプログラムを考慮すると、次のようになります。
//in
#define MAX 50
int main(int argc, char* argv[]) {
int *count;
int fd=shm_open("/count",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
int ret=ftruncate(fd,sizeof(int));
count=mmap(0,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
while ((*count)==MAX);
(*count)++;
}
//out
int main(int argc, char* argv[]) {
int *count;
int fd=shm_open("/count",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
int ret=ftruncate(fd,sizeof(int));
count=mmap(0,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
(*count)--;
}
2 つの質問があります。
1) このプログラムが正しく動作しないのはなぜですか (カウント数が 50 を超えないことが保証されていません)。
2) 2 つのプログラムを修正するにはどうすればよいですか?
ありがとう。