首页 > 系统相关 >进程间通信-信号量

进程间通信-信号量

时间:2023-04-04 18:33:50浏览次数:34  
标签:信号量 cpid 间通信 printf 进程 include 资源

资源竞争

  • 资源竞争:当多个进程在同时访问共享资源时,会产生资源竞争,最终最导致数据混乱
  • 临界资源:不允许同时有多个进程访问的资源,包括硬件资源(CPU、内存、存储器以及其他外围设备)与软件资源(共享代码段、共享数据结构)
  • 临界区:访问临界资源代码

多进程对 stdout 资源的竞争

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>

int main(){
    pid_t cpid;

    cpid = fork();
    if(cpid == -1){
        perror("[Error] fork()");
        exit(EXIT_FAILURE);
    }
    else if(cpid == 0){
        while(1){
            printf("----------------\n");
            printf("C start.\n");
            printf("C end.\n");
            printf("---------------\n");
        }
    }else if(cpid > 0){
        while(1){
            printf("----------------\n");
            printf("P start.\n");
            printf("P end.\n");
            printf("-----------------\n");
        }
        wait(NULL);
    }
    return 0;


}

二、同步与互斥

  • 互斥 :同一时刻只有一个进程访问临界资源
  • 同步: 在互斥的基础上增加了进程对临界资源的访问顺序
  • 进程主要的同步与互斥手段是 信号量

信号量简介

  • 信号量: 由内核维护的整数,其值被限制为大于或等于0
  • 信号量可以执行如下操作:
    • 将信号量设置成一个具体的值
    • 在信号量当前值的基础上加上一个数值
    • 在信号量当前值的基础上减上一个数值
    • 等待信号量的值为 0
      一般信号量分为 二值信号量 与 数信号量
  • 二值信号量 :一般指的是信号量 的值为 1可以理解为只对应一个资源
  • 计数信号量:一般指的是值大于等于2可以理解为对应多个资源0
  • 在 Linux 系统中查询信号量使用 ipcs -s

标签:信号量,cpid,间通信,printf,进程,include,资源
From: https://www.cnblogs.com/shubin/p/17287355.html

相关文章

  • windows监控进程是否存在
    @echooff:runtasklist/FI"IMAGENAMEeqSDPAgent.exe"2>NUL|find/I/N"SDPAgent.exe">NULif"%ERRORLEVEL%"=="0"(echoProgramisrunningfor/f"skip=3tokens=2"%%iin(......
  • node子进程(Child Process)获取硬盘分区
    node  child_process文档 child_process.exec(command[,options][,callback])command <string> Thecommandtorun,withspace-separatedarguments.options<Object>cwd <string> Currentworkingdirectoryofthechildprocess. Default: null.env......
  • EasyCVR新增功能:Windows系统下托盘可显示进程图标
    EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、宇视SDK等(具体见下图)。近期我们对EasyCVR新增了托盘显示......
  • 进程间通信的概念-简介
    进程间通信的概念进程是一个独立的资源分配单元,不同进程(这里所说的进程通常是指用户进程)之间的资源是独立的,没有关联。不能在一个进程中访问另一个进程的资源。但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信(IPC:InterprocessesCommunica......
  • 进程间通信-共享内存
    共享内存介绍共享内存是将分配的物理空间直接映射到进程的用户虚拟地址空间中,减少数据在内核空间缓存共享内存是一种效率较高的进程间通讯的方式在Linux系统中通过ipcs-m查看所有的共享内存共享内存模型共享内存创建创建共享内存调用shmget()函数函数头文件......
  • 进程间通信 消息队列
    SystemVIPIPC:Inter-ProcessCommunication(进程间通讯)SystemV是早期的unix系统,曾经被称为AT&TSystem,是unix操作系统中比较重要的一个分支,现在Linux系统一般都支持SystemVIPCSystemVIPC对象共有三种消息队列共享内存信号量SystemVIPC是由内......
  • 【CSAPP】进程 | 上下文切换 | 用户视角下的并发进程
     ......
  • XmlTextReader正由另一进程使用,因此该进程无法访问此文件
    此处调用报错:publicvoidsetMaxValueByXml(stringJym,stringvalueMax){XmlDocumentxmlDoc=newXmlDocument();xmlDoc.Load(Server.MapPath("XMLData.xml"));XmlNodeListnodeList=xmlDoc.SelectSingleNode("body")......
  • C#额外管理进程
    1、额外打开进程关闭进程(放在程序打开或者关闭时比如aubdioftp服务)publicstaticvoidStartFtpPress(){stringpath=System.Environment.CurrentDirectory;stringfileName=path+"\\FtpAudio.exe";System.Diagnostics......
  • Linux系统下进程回收--waitpid函数
    waitpid函数的作用和wait函数的作用相同,只是有些参数不同。在Linux终端下输入命令:man2waitpid查看waitpid函数的具体描述:SYNOPSIS#include<sys/types.h>#include<sys/wait.h>pid_twaitpid(pid_tpid,int*wstatus,intoptions);......