考慮到這兩個程序:操作系統 - 過程
//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)--;
}
我有兩個問題:
1)爲什麼這個程序不能正常工作(不保證計數的數量不超過50)?
2)我該如何糾正這兩個程序來做到這一點?
謝謝。
首先,你應該檢查系統調用的返回值。你不知道他們是否成功。 –
如何確保計數數量從未超過50?謝謝。 – tomss
這裏的控制流程還不清楚。這兩個程序何時運行?他們每個人跑了多少次? –