Linux--信号量有血缘进程间同步互斥

无名信号量 用于 血缘关系的进程间互斥

#include<stdio.h>
#include<semaphore.h>
#include<unistd.h>
#include<sys/mman.h>
void my_printf(char* str){
     int i = 0;
     while (str[i] != '\0')
     { 
         printf("%c", str[i++]);
          fflush(stdout);
          sleep(1);
      }
  return;
}

int main(int argc,char const* argv[])
{
     //定义一个无名信号量
     //MAP_ANONYMOUS匿名映射 ‐1不需要文件描述符
     sem_t *sem = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED |
     MAP_ANONYMOUS, ‐1, 0); 
    //无名信号量的初始化 第一个1表示进程 第二个1表示初始化值1
    sem_init(sem, 1, 1);
    pid_t pid = fork();
    if (pid == 0) //子进程
    { 
          //P操作
          sem_wait(sem);
          my_printf("hello");
          //V操作
          sem_post(sem); 
    }
    else if (pid > 0) //父进程
    { 
         //P操作
         sem_wait(sem);
         my_printf("world");
         //V操作
         sem_post(sem);
    }    
     sem_destroy(sem);
     return 0;
}


无名信号量 用于 血缘关系的进程间同步

#include<stdio.h>
#include<semaphore.h>
#include<unistd.h>
#include<sys/mman.h>
void my_printf(char* str){
     int i = 0;
     while (str[i] != '\0')
     {
          printf("%c", str[i++]);
          fflush(stdout); 
         sleep(1);
      }
  return;
}
int main(int argc,char const* argv[])
{
     //定义一个无名信号量
     //MAP_ANONYMOUS匿名映射 ‐1不需要文件描述符
     sem_t *sem1 = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE,
                                             MAP_SHARED |     MAP_ANONYMOUS, ‐1, 0);
     sem_t *sem1 = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE,                                             MAP_SHARED |     MAP_ANONYMOUS, ‐1, 0);

     //无名信号量的初始化 第一个1表示进程 第二个1表示初始化值1
    sem_init(sem1, 1, 1);
    sem_init(sem2, 1, 0);
    pid_t pid = fork(); 
   if (pid == 0) //子进程
    {
           //P操作
          sem_wait(sem1);
          my_printf("hello");
          //V操作
          sem_post(sem2);
     }
    else if (pid > 0) //父进程
    {
          //P操作
         sem_wait(sem2);
         my_printf("world");
         //V操作
         sem_post(sem1);
    }
    sem_destroy(sem); 
    return 0;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容