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

linux内核进程间通信IPC----消息队列

消息队列:提供一种从一个进程向另一个进程发送一个数据块的方法。与FIFO相比,消息队列的优势在于,它独立于发送和接收进程而存在。

  1.链表式结构组织,存放于内核。

  2.通过队列标识来引用。

  3.通过一个数据类型来索引指定的数据。

Linux内核的等待队列(Wait Queue是重要的数据结构,与进程调度机制紧密相关联,可以用来同步对系统资源的访问异步事件通知跨进程通信(IPC等。

在Linux驱动程序中,可以使用等待队列(Wait Queue)来实现阻塞进程的唤醒。

1.定义“等待队列头部”

wait_queue_head_t my_queue;

2.初始化“等待队列头部”

init_waitqueue_head(&my_queue);

  而下面的DECLARE_WAIT_QUEUE_HEAD()宏可以作为定义并初始化等待队列头部的“快捷方式”。

DECLARE_WAIT_QUEUE_HEAD (name)

3.定义等待队列元素

DECLARE_WAITQUEUE(name, tsk)

  该宏用于定义并初始化一个名为name的等待队列元素。

4.添加/移除等待队列

void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);

void remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait); 

add_wait_queue()用于将等待队列元素wait添加到等待队列头部q指向的双向链表中,而

remove_wait_queue()用于将等待队列元素wait从由q头部指向的链表中移除。

5.等待事件

wait_event(queue, condition)

wait_event_interruptible(queue, condition)

wait_event_timeout(queue, condition, timeout)

wait_event_interruptible_timeout(queue, condition, timeout)  

等待第1个参数queue作为等待队列头部的队列被唤醒,而且第2个参数condition必须满足,否则继续阻塞。wait_event()和wait_event_interruptible()的区别在于后者可以被信号打断,而前者不能。加上_timeout后的宏意味着阻塞等待的超时时间,以jiffy为单位,在第3个参数的timeout到达时,不论condition是否满足,均返回。

函数原型:

#define wait_event_interruptible(wq, condition)

({

int __ret = 0;

if (!(condition))

__wait_event_interruptible(wq, condition, __ret);

__ret;

})

@wq:等待队列,创建等待队列查看

@condition:当是0时候进程进入休眠,是1的时候继续往下运行

6.唤醒队列

void wake_up(wait_queue_head_t *queue);

void wake_up_interruptible(wait_queue_head_t *queue);  

wake_up()应该与wait_event()或wait_event_timeout()成对使用,而wake_up_interruptible()则应与wait_event_interruptible()或wait_event_interruptible_timeout()成对使用。wake_up()可唤醒处于TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE的进程,而wake_up_interruptible()只能唤醒处于TASK_INTERRUPTIBLE的进程。

相关文章:

linux内核进程间通信IPC----消息队列

消息队列:提供一种从一个进程向另一个进程发送一个数据块的方法。与FIFO相比,消息队列的优势在于,它独立于发送和接收进程而存在。 1.链表式结构组织,存放于内核。 2.通过队列标识来引用。 3.通过一个数据类型来索引指定的数据。 …...

PHP实现微信小程序状态检测(违规、暂停服务、维护中、正在修复)

实现原理 进入那些状态不正常的小程序会被重定向至一个Url&#xff0c;使用抓包软件抓取这个Url&#xff0c;剔除不必要参数&#xff0c;使用cURl函数请求网页获得HTML内容&#xff0c;根据内容解析出当前APPID的小程序的状态。 代码 <?php// 编码header(Content-type:ap…...

ubuntu在线直接升级

前几天VMware上安装了ubuntu&#xff0c;当时的内核版本支持(ipguard,加密软件)&#xff0c;后来ubuntu自动升级了linux内核&#xff0c;导致加入软件不支持&#xff0c;无法访问加密文件了。后来加密软件商更新了软件&#xff0c;但还是赶不上linux内核更新速度&#xff0c;还…...

学习笔记:卸载nav2 navigation2导航

nav2二进制文件安装 nav2导航安装方式分为二进制文件安装和源码方式安装&#xff0c;如果想用最快的方式跑通代码&#xff0c;推荐二进制安装&#xff0c;不用编译&#xff0c;没有缺少依赖编译失败的烦恼&#xff0c; 安装命令&#xff1a; sudo apt install ros-$ROS_DISTR…...

觉非科技数据闭环系列 | BEV感知研发实践

随着自动驾驶迈向量产场景&#xff0c;“BEV感知数据闭环”已成为新一代自动驾驶量产系统的核心架构。数据成为了至关重要的技术驱动力&#xff0c;发挥数据闭环的飞轮效应或将成为下半场从1到N的胜负关键。 觉非科技在此方面已进行了大量的研究工作&#xff0c;并在实际量产项…...

程序员情绪把控

文章目录 建议情绪 建议 保持稳定的情绪在工作中非常重要&#xff0c;以下是一些建议&#xff1a; 自我意识&#xff1a;保持对自己情绪的觉察和理解&#xff0c;了解自己的情绪状态和触发情绪的因素。通过自我反省和观察&#xff0c;你可以更好地管理和调节情绪。 健康生活方…...

弱监督目标检测:ALWOD: Active Learning for Weakly-Supervised Object Detection

论文作者&#xff1a;Yuting Wang,Velibor Ilic,Jiatong Li,Branislav Kisacanin,Vladimir Pavlovic 作者单位&#xff1a;Rutgers University;The Institute for Artificial Intelligence Research and Development of Serbia;Nvidia Corporation 论文链接&#xff1a;http:…...

驱动开发 day3

总结&#xff1a;自动创建设备节点udev的流程 1.如何创建节点 手动创建&#xff1a;mknod 地址 设备文件类型 主设备号 次设备号(0 - 255) 自动创建&#xff1a;devfs (创建节点的逻辑在内核 ---> 2.4版本以前使用) udev (创建节点的逻辑在应用层) mdev (轻量级的udev) 2.…...

许可license分析 第一章

许可分析是指对软件许可证进行详细的分析和评估&#xff0c;以了解组织内部对软件许可的需求和使用情况。通过许可分析&#xff0c;可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤&#xff1a; 收集许可证信息&#xff1a;首先&#xff0c…...

Goby 漏洞发布|管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞

漏洞名称&#xff1a;管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞 English Name&#xff1a; GJP SelectImage.aspx file upload vulnerability CVSS core: 9.8 影响资产数&#xff1a;2617 漏洞描述&#xff1a; 任我行率先针对中小企业推出了管家婆进销存、财务…...

Android屏幕录制

这里使用Java语言编写实现&#xff0c;完整代码如下&#xff1a; 文件 AndroidMainfest.xml 的主要配置 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"…...

实在智能牵手埃林哲,“TARS-RPA-Agent+云时通”双剑合璧共推企业数字化转型

近日&#xff0c;《数字中国建设整体布局规划》进一步明确了数字化发展的方向和节奏&#xff0c;对企业数字化建设提出了新要求。回看过去几十年&#xff0c;信息化建设如火如荼&#xff0c;各类IT系统如雨后春笋般涌现&#xff0c;系统的自动化操作及系统间数据交互共享等需求…...

拥有这个中文版CustomGPT,你也能定制自己的AI问答机器人

人工智能技术的快速发展为各行各业带来了前所未有的机会&#xff0c;其中之一就是定制化的问答机器人。这些机器人可以用于客户支持、知识管理、虚拟助手等多个领域&#xff0c;帮助企业提高效率&#xff0c;提供更好的用户体验。很多人可能都知道通过CustomGPT能够设计自己的人…...

fastadmin 基本使用配置

fastadmin 版本 1.3.5 thinkphp 版本 5.0.25 配置 cache 为 redis 保存 // ---------------------------------------------------------------------- // | 缓存设置 // ---------------------------------------------------------------------- cache …...

netty 线程组

我们的bossgroup和workgroup都是使用的NioEventLoopGroup。其内部有一个EventExecutor类型的数组用来存储所有的线程组。 NioEventLoopGroup {EventExecutor[] children; }NioEventLoopGroup继承自MultithreadEventExecutorGroup&#xff0c;构造函数不指定线程数默认会根据系…...

Reactor 第十二篇 WebFlux集成PostgreSQL

1 引言 在现代的应用开发中&#xff0c;数据库是存储和管理数据的关键组件。PostgreSQL 是一种强大的开源关系型数据库&#xff0c;而 WebFlux 是 Spring 框架提供的响应式编程模型。本文将介绍如何使用 Reactor 和 WebFlux 集成 PostgreSQL&#xff0c;实现响应式的数据库访问…...

红队打靶:Me and My Girlfriend打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透&#xff08;修改XFF代理&#xff09; 第三步&#xff1a;数据库手工枚举 第四步&#xff1a;sudo php提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行…...

Mysql高级——索引(2)

常见索引 索引分类 在MySQL数据库&#xff0c;将索引的具体类型主要分为以下几类&#xff1a;主键索引、唯一索引、常规索引、全文索引。 分类含义特点关键字主键索引针对于表中主键创建的索引默认自动创建, 只能有一个PRIMARY唯一索引避免同一个表中某数据列中的值重复可以…...

【史上最硬核分享】Docker+jenkinsPipeline 运行实现 python 自动化(超详细)

一、实现思路 在 Linux 服务器安装 docker创建 jenkins 容器jenkins 中创建 pipeline 项目根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境)运行新的 python 容器&#xff0c;执行 jenkins 从仓库中拉下来的自动化项目执行完成之后删除容器 二、环境准备 Linu…...

leetcode 3. 无重复字符的最长子串

2023.9.15 本题我用的暴力双层for循环 unordered_set 解决的&#xff0c;外循环控制字符起始位置&#xff0c;内循环将字符放入 unordered_set&#xff0c;并查找有无重复的元素。 用了一个全局变量记录最长字串的长度&#xff0c;局部变量count记录当前层循环的最长子串长度…...

告别MQTT!用Python Socket自建轻量数据通道,ESP32直连MySQL并更新网页状态

告别MQTT&#xff01;用Python Socket自建轻量数据通道&#xff0c;ESP32直连MySQL并更新网页状态 在物联网项目开发中&#xff0c;MQTT协议因其轻量级和发布-订阅模式而广受欢迎。然而&#xff0c;当我们需要更精细地控制数据传输流程、减少中间件依赖或优化资源使用时&#x…...

【限时开放】DeepSeek内部调试工具集首次对外披露:含Request ID全链路追踪、模型响应热力图与异常模式识别器

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek API接入开发教程 DeepSeek 提供了稳定、高性能的大模型 API 接口&#xff0c;支持文本生成、对话补全与函数调用等多种能力。接入前需在官方控制台申请 API Key&#xff0c;并确保账户已开通对…...

RevokeMsgPatcher实战指南:Windows微信QQ防撤回的终极秘籍

RevokeMsgPatcher实战指南&#xff1a;Windows微信QQ防撤回的终极秘籍 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcod…...

卸载软件后右键菜单残留?用PowerShell精准清理注册表(附一键备份脚本)

彻底告别右键菜单残留&#xff1a;PowerShell注册表清理实战指南 刚卸载完某款压缩软件&#xff0c;却发现右键菜单里依然顽固地留着它的选项——这种经历恐怕不少Windows用户都遇到过。上周帮同事处理电脑时&#xff0c;就遇到了一个典型案例&#xff1a;卸载"可牛压缩&q…...

科研绘图升级:用CMplot为你的基因组文章制作高颜值SNP密度图(R实战)

科研绘图升级&#xff1a;用CMplot为你的基因组文章制作高颜值SNP密度图&#xff08;R实战&#xff09; 在基因组学研究中&#xff0c;数据可视化不仅是结果展示的手段&#xff0c;更是科学叙事的重要语言。一张精心设计的SNP密度图&#xff0c;能够直观呈现全基因组范围内单核…...

基于Tauri与Rust构建跨平台Claude桌面客户端:架构设计与工程实践

1. 项目概述&#xff1a;一个为Claude设计的“圣杯”级桌面应用 如果你和我一样&#xff0c;在日常开发、写作或信息处理中重度依赖Anthropic的Claude模型&#xff0c;那么你肯定也经历过在浏览器标签页间反复横跳、复制粘贴、以及管理冗长对话历史的烦恼。 CoderLuii/HolyCla…...

3步解决Windows 10/11下PL-2303串口设备驱动失效问题

3步解决Windows 10/11下PL-2303串口设备驱动失效问题 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 你是否遇到过这样的情况&#xff1a;在Windows 10或Windows 11系统…...

【Arcgis实战技巧】巧用DOM目视解译,从DSM中精准“挖”出地面高程点

1. 为什么需要从DSM中提取地面高程点&#xff1f; 在测绘和地理信息领域&#xff0c;数字表面模型&#xff08;DSM&#xff09;记录了地表所有物体的顶部高程信息&#xff0c;包括建筑物、树木、电线杆等。但很多时候我们需要的是数字高程模型&#xff08;DEM&#xff09;&…...

AI智能体安全防护:ClawGuard主动防御系统架构与实战部署

1. 项目概述&#xff1a;为AI智能体构建一道主动防御的“防火墙”在AI智能体&#xff08;AI Agent&#xff09;技术快速普及的今天&#xff0c;我们正面临一个全新的安全挑战。想象一下&#xff0c;你精心调教的AI助手&#xff0c;能够自主浏览网页、调用API、执行命令&#xf…...

Windows平台iOS模拟器开发革命:ipasim如何让iOS应用在Windows上“原生“运行

Windows平台iOS模拟器开发革命&#xff1a;ipasim如何让iOS应用在Windows上"原生"运行 【免费下载链接】ipasim iOS emulator for Windows 项目地址: https://gitcode.com/gh_mirrors/ip/ipasim 嘿&#xff0c;开发者朋友们&#xff01;你是否曾经梦想过在Win…...