C 使用sys信号量的输出同步

C 使用sys信号量的输出同步,c,synchronization,mutex,semaphore,shared-memory,C,Synchronization,Mutex,Semaphore,Shared Memory,您的代码中存在一些问题,请参阅代码中的注释以了解说明 void display(char *str) { char *p; for (p=str; *p; p++) { write(1, p, 1); usleep(100); } } 您的代码中存在一些问题,请参阅代码中的注释以了解说明 void display(char *str) { char *p; for (p=str; *p; p++) { write(1, p, 1);

您的代码中存在一些问题,请参阅代码中的注释以了解说明

void display(char *str)
{
  char *p;
  for (p=str; *p; p++)
  {
    write(1, p, 1);
    usleep(100);
  }
}

您的代码中存在一些问题,请参阅代码中的注释以了解说明

void display(char *str)
{
  char *p;
  for (p=str; *p; p++)
  {
    write(1, p, 1);
    usleep(100);
  }
}
int main()
{
   int i;
   struct sembuf up = {0,1,0};
   struct sembuf down = {0,-1,0};
   int sem0 = semget(IPC_PRIVATE,1,0600);
   int sem1 = semget(IPC_PRIVATE,1,0600);
   if (fork())
   {
       for (i=0;i<10;i++)
       {
           display("ab");
           semop(sem1,&up,1);
           semop(sem0,&down,1);
           //wait(NULL); //MAYUR: wait() suspends the execution until one of its children terminates. But this was unnecessary here. I removed it. 
       } //MAYUR: There was no brackets for "for loop". Added it in both the blocks.
   }
   else
   {
        for (i=0;i<10;i++)
        {
           semop(sem1,&down,1);
           display("cd\n");
           semop(sem0,&up,1);
           //semop(sem1,&down,1); //MAYUR: You are doing wait for sem1 in two places. This is was leading to deadlock. Removed it.
        }
   }
   semctl(sem0,0,IPC_RMID);
   semctl(sem1,0,IPC_RMID);
   return 0;
}
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd