新闻详情

新闻详情

首页 / 资讯中心 / 详情

互斥锁+共享内存封装库,实现大数据进程间通讯(Linux)

发布时间:2026/9/10 9:24:05来源:尧图网络
互斥锁+共享内存封装库,实现大数据进程间通讯(Linux)
Linux下提供了多种共享内存的通讯机制常用的就是socket但是socket通讯使用简单但性能不佳大数据传输最优的方式还是共享内存方式。本章分享封装库就是基于共享内存实现的。封装库连接(66条消息) 互斥锁共享内存封装库实现进程间通讯(Linux)-C文档类资源-CSDN文库本章分享库是基于Ubuntu16.04编译的如需其它平台编译库可以发邮件至512146329qq.com共享内存Linux提供了三种方式POSIX共享内存对象POSIX内存映射文件SYSTEM V共享内存这三种方式的区别就不分析了大家可以网上检索一下。本章分享的基于第二种方式“POSIX内存映射文件”实现的。设计的要求1使用进程间的互斥锁实现了共享内存共享数据的互斥访问问题2有效数据部分通过分配器来管理内存的开辟和释放3实现了一对多的订阅/发布模型一端发送多端接收的模型设计的架构图接口定义#ifndef __DEVIN_SHM_FIFO_H__ #define __DEVIN_SHM_FIFO_H__ void *devin_shm_fifo_init(char *topic); void devin_shm_fifo_destory(void *handle); int devin_shm_fifo_read(void *handle, void *buf, int max_buf_len, int *datalen); // 写入端有一次拷贝 (将数据拷贝到共享内存区域) int devin_shm_fifo_write(void *handle, const void *data, int datalen); // 零拷贝的操作 (仅用于发送或写入端) // 从共享内存中获的可用的空间返回地址 int devin_shm_fifo_get_addr(void *handle, void **addr, void **addr_param, int datalen); // 数据写入共享内存后及时同步到接收端 int devin_shm_fifo_write_sync(void *handle, void *addr, void *addr_param, int datalen); #endif接口使用示例// 订阅方 #include stdio.h #include unistd.h #include string.h #include sys/time.h #include devin_shm_fifo.h int main() { char *topic topic; void *shmfifo NULL; char buffer[1024*1024*3] {0}; int i 0; int ret -1; struct timeval cur_time; int datalen 0; shmfifo devin_shm_fifo_init(topic); if(!shmfifo) { printf(devin_shm_fifo_init fail\n); return -1; } int mm 0; while (1) { memset(buffer, 0, sizeof(buffer)); ret devin_shm_fifo_read(shmfifo, buffer, sizeof(buffer), datalen); if(ret 0) { gettimeofday(cur_time,NULL); printf(%05d, %s, %ld\n, mm, buffer, cur_time.tv_sec * 1000000 cur_time.tv_usec); }else{ //printf(xxxxxxx : %d\n, ret); } usleep(5*1000); } devin_shm_fifo_destory(shmfifo); return 0; }// 发布方 #include stdio.h #include unistd.h #include string.h #include sys/time.h #include devin_shm_fifo.h int main() { char *topic topic; void *shmfifo NULL; char buffer[1024*1024*3] {0}; int i 0; int ret -1; void *addr NULL; void *addr_param NULL; struct timeval cur_time; shmfifo devin_shm_fifo_init(topic); if(!shmfifo) { printf(shmfifo_init fail\n); return -1; } while (1) { memset(buffer, 0, sizeof(buffer)); gettimeofday(cur_time,NULL); snprintf(buffer, sizeof(buffer), aaaaa%05d, time: %ld, i, cur_time.tv_sec * 1000000 cur_time.tv_usec); send: // 获取指定大小的空间地址 ret devin_shm_fifo_get_addr(shmfifo, addr, addr_param, sizeof(buffer)); if(ret 0) { printf(devin_shm_fifo_get_addr ret %d\n, ret); goto send; } // 给空间填充数据 memcpy(addr, buffer, sizeof(buffer)); // 数据同步到接收端 ret devin_shm_fifo_write_sync(shmfifo, addr, addr_param, sizeof(buffer)); if(ret 0) { printf(devin_shm_fifo_write_sync ret %d\n, ret); }else{ printf(%s\n, buffer); } usleep(10*1000); } //void shmfifo_get(shmfifo_t *fifo, void *buf); devin_shm_fifo_destory(shmfifo); return 0; }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Remix data-table 迁移系统深度解析:为什么用 .sql 文件替代 TypeScript 迁移 2026/9/10 10:03:10

Remix data-table 迁移系统深度解析:为什么用 .sql 文件替代 TypeScript 迁移

Remix data-table 迁移系统深度解析:为什么用 .sql 文件替代 TypeScript 迁移 【免费下载链接】remix The fully-stacked web framework 项目地址: https://gitcode.com/GitHub_Trending/re/remix 本篇围绕 Remix 仓库的架构决策记录 006-sql-migrations.md …

阅读更多 →
DNAnexus 集成安全认证实践指南:从 DX_SECURITY_CONTEXT 到令牌生命周期管理 2026/9/10 10:03:10

DNAnexus 集成安全认证实践指南:从 DX_SECURITY_CONTEXT 到令牌生命周期管理

DNAnexus 集成安全认证实践指南:从 DX_SECURITY_CONTEXT 到令牌生命周期管理 【免费下载链接】scientific-agent-skills Turn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-u…

阅读更多 →
Social-Analyzer 使用指南:一条命令扫描 1000+ 网站,找到一个人的社交账号 2026/9/10 10:03:10

Social-Analyzer 使用指南:一条命令扫描 1000+ 网站,找到一个人的社交账号

Social-Analyzer 使用指南:一条命令扫描 1000 网站,找到一个人的社交账号 【免费下载链接】social-analyzer API, CLI, and Web App for analyzing and finding a persons profile in 1000 social media \ websites 项目地址: https://gitcode.com/Git…

阅读更多 →
离线语音转文字如何落地?Handy 安装、配置与排障完整指南 2026/9/10 10:03:10

离线语音转文字如何落地?Handy 安装、配置与排障完整指南

离线语音转文字如何落地?Handy 安装、配置与排障完整指南 【免费下载链接】Handy A free, open source, and extensible speech-to-text application that works completely offline. 项目地址: https://gitcode.com/GitHub_Trending/handy11/Handy Handy 是…

阅读更多 →
Spring Boot 请求体重复读取实战:过滤器与RequestWrapper解决RequestBody为null 2026/9/10 10:03:10

Spring Boot 请求体重复读取实战:过滤器与RequestWrapper解决RequestBody为null

做后端时间长了,一定会遇到一个让人抓狂的场景:我想在过滤器里把请求体的 JSON 打出来看日志,或者做一个统一的签名校验,结果日志打完了,Controller 里的 RequestBody 参数变成了 null。明明 Postman 里传得好好的&…

阅读更多 →
完整图像/视频/3D标注:CVAT 15 分钟部署 2026/9/10 10:00:10

完整图像/视频/3D标注:CVAT 15 分钟部署

完整图像/视频/3D标注:CVAT 15 分钟部署 【免费下载链接】cvat Computer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise products, as well as la…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞