C编程:共享内存信号挂起
我有两个程序,一个向共享内存写入数据,另一个从共享内存读取数据。假设写入程序将数据0-9写入共享内存,然后等待单元读取器读取该数据并将其显示在屏幕上,并向写入程序进程发送信号,然后写入程序将数据10-19写入共享内存,然后等待,直到读取器读取并向屏幕显示数据,并向写入程序发送信号以结束进程 编写器代码:C编程:共享内存信号挂起,c,signals,shared-memory,C,Signals,Shared Memory,我有两个程序,一个向共享内存写入数据,另一个从共享内存读取数据。假设写入程序将数据0-9写入共享内存,然后等待单元读取器读取该数据并将其显示在屏幕上,并向写入程序进程发送信号,然后写入程序将数据10-19写入共享内存,然后等待,直到读取器读取并向屏幕显示数据,并向写入程序发送信号以结束进程 编写器代码: #define SHMKEY 75 int shmid; void cleanup(int); int main (void) { int *pint, *ppint, i;
#define SHMKEY 75
int shmid;
void cleanup(int);
int main (void) {
int *pint, *ppint, i;
for (i=0;i<20;i++) signal(i,cleanup);
shmid=shmget(SHMKEY, 128,0666|IPC_CREAT);
pint=(int *)shmat(shmid,0,0);
ppint=pint;
for(i=0;i<10;i++) { *ppint++ = i };
*pint=-1;
kill(getpid(), SIGSTOP);
for(i=10;i<20;i++) { *ppint++ = i };
*pint=-1;
kill(getpid(), SIGSTOP);
return 0;
}
void cleanup(int x) {
shmctl(shmid,IPC_RMID,0);
exit(0);
}
我似乎在读卡器中的第二个繁忙等待循环后挂起,但我不明白为什么?因为我在繁忙等待之前向写入程序发送一个信号,以取消设置标志*pint=-1
#define SHMKEY 75
int main(int argc, char *argv[]) //expects pid of writer as clarg
{
int i, *pint, *pint1, shmid;
int pid= atoi(argv[1]);
shmid=shmget(SHMKEY, 128,0666);
pint=(int *)shmat(shmid,0,0);
while(*pint != -1);
for(i=0;i<10;i++) printf("%d\n",*pint++);
// Reset busy wait flag so it continues to wait
*pint=0;
kill(pid, SIGCONT);
printf("Signal 1\n");
while(*pint != -1);
for(i=10;i<19;i++) printf("%d\n",*pint++);
kill(pid, SIGCONT);
printf("Signal 2\n");
}
$./writer &
[1] 9350
$ ./reader 9350
-1
1
2
3
4
5
6
7
8
9
Signal 1
(hangs)