三个程序输出 ABCABC

  
 #include 
  int main(int argc, const char *argv[])
  {
      //1.创建3个灯
      int semid=create_sem(3);
      if (semid==-1)
      {
          perror("semid error1");
         return -1;
     }
     //system("fg 1");
     getchar();
     int n=5;
      while(n--)
     {
         P(semid,2);
          printf("A");
         fflush(stdout);
            //释放0号
         V(semid,0);
     }
     return 0;
 }                                                                                                          
~        
 #include 
 
  int main(int argc, const char *argv[])
  {
      //1.打开信号灯集
      int semid=create_sem(3);
      int n=5;
      while(n--)
      {
        P(semid,0);
        printf("B");
         fflush(stdout);
         V(semid,1);
     }
     return 0;
 }                                                                                                          
~                                                                                                              
~      
  #include 

  int main(int argc, const char *argv[])
  {
      //1.打开信号灯集
      int semid=create_sem(3);
      int n=5;
      while(n--)
      {
         P(semid,1);
         printf("C");                                                                                       
         fflush(stdout);
          V(semid,2);
      }
      //4.删除信号灯集
      del_sem(semid);
      return 0;
  }
~          

 共享内存

#include "head.h"
//发送端
#define PAGE_SIZE 4096
int main(int argc, char const *argv[])
{
  //创建一个key
  key_t key = ftok("/", 't');
  if (key == -1)
  {
    perror("fork error");
    return -1;
  }
  //通过key创建共享内存段
  int shmid = shmget(key, PAGE_SIZE, IPC_CREAT | 0664);
  if (shmid == -1)
  {
    perror("shmget error");
    return -1;
  }
  //将共享内存映射到用户空间
  char *addr = (char *)shmat(shmid, NULL, 0);
  if (addr == (void *)-1)
  {
    perror("shmat error");
    return -1;
  }
  //使用内存段
  while (1)
  {
    printf("请输入>>>>");
    fgets(addr, PAGE_SIZE,
     stdin);
    addr[strlen(addr) - 1] = 0;
    if (strcmp(addr, "quit") == 0)
    {
      break;
    }
  }

  //取消映射
  if (shmdt(addr) == -1)
  {
    perror("shmdt error");
    return -1 ;
  }

  return 0;
}
#include "head.h"
//接收端
#define PAGE_SIZE 4096
int main(int argc, char const *argv[])
{
  //创建一个key
  key_t key = ftok("/", 't');
  if (key == -1)
  {
    perror("fork error");
    return -1;
  }
  //通过key创建共享内存段
  int shmid = shmget(key, PAGE_SIZE, IPC_CREAT | 0664);
  if (shmid == -1)
  {
    perror("shmget error");
    return -1;
  }
  //将共享内存映射到用户空间
  char *addr = (char *)shmat(shmid, NULL, 0);
  if (addr == (void *)-1)
  {
    perror("shmat error");
    return -1;
  }
  //使用内存段
  while (1)
  {
    printf("共享内存中的数据为%s\n", addr);
    if (strcmp(addr, "quit") == 0)
    {
      break;
    }
  }

  //取消映射
  if (shmdt(addr) == -1)
  {
    perror("shmdt error");
    return -1;
  }
  //删除共享内存
  if (shmct1(shmid, IPC_RMID, NULL) == -1)
  {
    perror("shmct1 error");
    return -1;
  }

  return 0;
}

 

 

你可能感兴趣的:(java,算法,数据结构)