C编程:共享内存信号挂起

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;

我有两个程序,一个向共享内存写入数据,另一个从共享内存读取数据。假设写入程序将数据0-9写入共享内存,然后等待单元读取器读取该数据并将其显示在屏幕上,并向写入程序进程发送信号,然后写入程序将数据10-19写入共享内存,然后等待,直到读取器读取并向屏幕显示数据,并向写入程序发送信号以结束进程

编写器代码:

#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)