当前位置: 首页 > wzjs >正文

熵网站seo入门培训班

熵网站,seo入门培训班,企业文化墙设计,极速模式无法访问wordpress【Linux学习笔记】进程通信之消息队列和信号量 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】进程通信之消息队列和信号量前言一. system V消息队列二. system V信号量2.1 并发编程,概…

【Linux学习笔记】进程通信之消息队列和信号量

🔥个人主页大白的编程日记

🔥专栏Linux学习笔记


文章目录

  • 【Linux学习笔记】进程通信之消息队列和信号量
    • 前言
    • 一. system V消息队列
    • 二. system V信号量
      • 2.1 并发编程,概念铺垫
      • 2.2 信号量
      • 2.3 内核是如何组织管理IPC资源的
      • 2.4 在minishell中添加管道的实现
    • 后言

前言

哈喽,各位小伙伴大家好!上期我们讲了进程间通信之共享内存
今天我们讲的是进程通信之消息队列和信号量。话不多说,我们进入正题!向大厂冲锋!
在这里插入图片描述

一. system V消息队列

  • 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法
  • 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值
  • 特性方面
    • IPC资源必须删除,否则不会自动清除,除非重启,所以system V IPC资源的生命周期随内核

在这里插入图片描述

二. system V信号量

信号量主要用于同步和互斥的,下面先来看看什么是同步和互斥。

2.1 并发编程,概念铺垫

在这里插入图片描述

在这里插入图片描述

  • 多个执行流(进程), 能看到的同一份公共资源:共享资源
  • 被保护起来的资源叫做临界资源
  • 保护的方式常见:互斥与同步
  • 任何时刻,只允许一个执行流访问资源,叫做互斥
  • 多个执行流,访问临界资源的时候,具有一定的顺序性,叫做同步
  • 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。
  • 在进程中涉及到互斥资源的程序段叫临界区。你写的代码=访问临界资源的代码(临界区)+不访问临界资源的代码(非临界区)
  • 所谓的对共享资源进行保护,本质是对访问共享资源的代码进行保护
    在这里插入图片描述

2.2 信号量

特性方面

  • IPC资源必须删除,否则不会自动清除,除非重启,所以system V IPC资源的生命周期随内核

理解方面

  • 信号量是一个计数器

作用方面

  • 保护临界区

本质方面

  • 信号量本质是对资源的预订机制

操作方面

  • 申请资源,计数器–,P操作
  • 释放资源,计数器++,V操作

电影院的例子

2.3 内核是如何组织管理IPC资源的

在这里插入图片描述

2.4 在minishell中添加管道的实现

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>#define MAX_CMD 1024
char command[MAX_CMD];
int do_face()
{memset(command, 0x00, MAX_CMD);printf("minishell$ ");fflush(stdout);if (scanf("%s", command) == 0) {getchar();return -1;}return 0;
}char **do_parse(char *buff)
{int arg = 0;static char *argv[32];char *ptr = buff;while(*ptr != '\0') {if (!isspace(*ptr)) {argv[arg++] = ptr;while((!isspace(*ptr)) && (*ptr) != '\0') {ptr++;}continue;}*ptr = '\0';ptr++;}argv[arg] = NULL;return argv;
}int do_redirect(char *buff)
{char *ptr = buff, *file = NULL;int type = 0, fd, redirect_type = -1;while(*ptr != '\0') {if (*ptr == '>') {*ptr++ = '\0';redirect_type++;if (*ptr == '>') {*ptr++ = '\0';redirect_type++;}}while(isspace(*ptr)) {ptr++;}}file = ptr;while((!isspace(*ptr)) && *ptr != '\0') {ptr++;}*ptr = '\0';if (redirect_type == 0) {fd = open(file, O_CREAT|O_TRUNC|O_WRONLY, 0664);} else {fd = open(file, O_CREAT|O_APPEND|O_WRONLY, 0664);}dup2(fd, 1);
}int do_command(char *buff)
{int pipe_num = 0, i;char *ptr = buff;int pipefd[32][2] = {{-1}};int pid = -1;pipe_command[pipe_num] = ptr;while(*ptr != '\0') {if (*ptr == '|') {pipe_num++;*ptr++ = '\0';pipe_command[pipe_num] = ptr;continue;}ptr++;}pipe_command[pipe_num + 1] = NULL;return pipe_num;
}int do_pipe(int pipe_num)
{int pid = 0, i;int pipefd[10][2] = {{-1}};char *argv = {NULL};for (i = 0; i <= pipe_num; i++) {pipe(pipefd[i]);}for (i = 0; i <= pipe_num; i++) {pid = fork();if (pid == 0) {do_redirect(pipe_command[i]);argv = do_parse(pipe_command[i]);close(pipefd[i][1]);dup2(pipefd[i][0], 0);if (i != pipe_num) {close(pipefd[i + 1][0]);dup2(pipefd[i + 1][1], 1);}execvp(argv[0], argv);} else {close(pipefd[i][0]);close(pipefd[i][1]);waitpid(pid, NULL, 0);}}return 0;
}int main(int argc, char *argv[])
{int num = 0;while(1) {if (do_face() < 0)continue;num = do_command(command);do_pipe(num);}return 0;
}

后言

这就是进程通信之消息队列和信号量。大家自己好好消化!今天就分享到这! 感谢各位的耐心垂阅!咱们下期见!拜拜~

http://www.dtcms.com/wzjs/526835.html

相关文章:

  • editplus怎么创网站苏州百度快照优化排名
  • 有个音乐网站老板做淫秽直播被抓阿里巴巴官网首页
  • 网络文化经营许可证变更安徽网站seo
  • 做商城网站需要的功能seo报价单
  • 建湖专业做网站的公司深圳营销型网站建设
  • 高端h5网站开发做seo用哪种建站程序最好
  • 怎么给网站做链接屏蔽百度软文推广怎么做
  • php 企业网站模板网站优化推广seo
  • 关于网站建设live2500宁波seo如何做推广平台
  • 智慧团建网登录入口seo快速优化方法
  • 做实体童装店在哪个网站批发好全网推广的方式
  • 怎么注册一个属于自己的网站太原做网站推广的公司
  • div css旅游网站模板网络推广员招聘
  • 哪类小网站容易做免费站长工具
  • 现在网站做SEO怎么样抖音seo
  • ppt做的模板下载网站长沙百度推广优化排名
  • 印刷网站建设百度搜索引擎下载免费
  • 郑州市做网站公司a汉狮全国网站排名
  • 重庆商务网站建设培训网站建设
  • 网站建设推广保举火13星今天最火的新闻头条
  • 帝国cms网站地址seo关键词软件
  • 承德网站建设电话网站目录结构
  • 电子商务网站规划与设计手机优化游戏性能的软件
  • 三明网站开发百度推广优化技巧
  • 两学一做是什么网站福州seo推广服务
  • dedecms5.7 整个网站 css和js代码怎么优化搜狗搜索旧版本
  • 洛阳专业做网站公司win7怎么优化最流畅
  • 网站跳出率seo公司推广
  • 网站推广服务合同判决书广州seo关键词优化外包
  • AAP网站开发需要多少钱360优化大师官方最新