고려할 때이 두 프로그램 :운영 시스템 - 프로세스
1) 왜이 프로그램이 제대로 작동하지 않습니다 (카운트 수를 초과하지 않을 것을 보장하지 않습니다
//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)--;
}
나는이 개 질문이 50)?
2) 어떻게 두 프로그램에서이를 수정할 수 있습니까?
감사합니다. 또한 그것은 실패 할 수의 mmap에서 반환 값을 확인
while((*count)==MAX); // semicolon ?
대신
while(*count==MAX)
(*count)++;
의 :
우선, 시스템 호출의 반환 값을 확인해야합니다. 그들이 성공했는지 여부는 정말로 알 수 없습니다. –
어떻게 카운트 수가 50을 초과하지 않도록 할 수 있습니까? – tomss
제어 흐름이 명확하지 않습니다. 이 두 프로그램은 언제 실행됩니까? 각각은 몇 번이나 실행됩니까? –