美文网首页
Linux--信号量有血缘进程间同步互斥

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

作者: 锈色的栅栏 | 来源:发表于2024-11-16 11:58 被阅读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 *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;
}

相关文章

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • Linux系统编程—进程间同步

    我们知道,线程间同步有多种方式,比如:信号量、互斥量、读写锁,等等。那进程间如何实现同步呢?本文介绍两种方式:互斥...

  • 第二章 信号量机制

    3)信号量的基本应用:实现进程互斥; 实现进程间的前趋关系(有序) *互斥信号量注意点: 1.互斥信号量mutex...

  • Unix进程间通信详解

    主要讲解进程间通信方式,包含管道 FIFO命名管道 消息队列 同步(互斥锁、条件变量、信号量、读写锁、fcntl记...

  • PV原语

    概念 PV原语通过操作信号量来完成进程间的同步和互斥。信号量由操作系统来维护 原语 P原语 为阻塞原语,负责把当前...

  • 第二章 进程通信、线程

    进程通信:进程通信是指进程之间的信息交换。 一、低级通信——进程之间的互斥和同步 信号量机制是有效的同步工具,但...

  • 理解操作系统之信号量的应用

    利用信号量实现进程互斥(模式) 利用信号量实现前驱关系(模式) 利用记录型信号量实现同步(模式) 1.利用信号量实...

  • 二.进程(6-7)进程通信、线程

    进程通信是指进程之间的信息交换。 一、低级通信——进程之间的互斥和同步 信号量机制是有效的同步工具,但作为通信...

  • 信号量

    头文件:#include 信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制...

  • 2-6-7进程通信、线程

    进程通信是指进程之间的信息交换。 一、低级通信——进程之间的互斥和同步 信号量机制是有效的同步工具,但作为通信工具...

网友评论

      本文标题:Linux--信号量有血缘进程间同步互斥

      本文链接:https://www.haomeiwen.com/subject/vqftjjtx.html