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

嵌入式第三十一天(线程间的机制,IPC机制)

一.线程间的机制:

二.死锁

死锁是指在多进程或多线程环境中,两个或多个进程(线程)相互等待对方释放资源,而陷入无限期阻塞的状态。

死锁产生的四个必要条件:

- 互斥条件:资源只能被一个进程(线程)占用,无法同时被多个使用。
- 持有并等待条件:进程(线程)已经持有至少一个资源,同时又在等待其他资源。
- 不可剥夺条件:已分配的资源不能被强制剥夺,只能由持有资源的进程(线程)主动释放。
- 循环等待条件:多个进程(线程)之间形成一种头尾相接的循环等待资源关系。

死锁的处理方式:

示例:

#include<stdio.h>
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include<unistd.h>char buff[1024] = {"ABC"};sem_t sem_A;
sem_t sem_B;
sem_t sem_C;void *task1(void *arg)
{while (1){sem_wait(&sem_A);printf("buff = %c\n",buff[0]);sem_post(&sem_B);}
}void *task2(void *arg)
{while (1){sem_wait(&sem_B);printf("buff = %c\n", buff[1]);sem_post(&sem_C);}
}void *task3(void *arg)
{while (1){sem_wait(&sem_C);printf("buff = %c\n", buff[2]);sem_post(&sem_A);sleep(1);}
}int main(int argc, const char *argv[])
{pthread_t tid[3];sem_init(&sem_A,0,1);sem_init(&sem_B,0,0);sem_init(&sem_C,0,0);pthread_create(&tid[0], NULL, task1, NULL);pthread_create(&tid[1], NULL, task2, NULL);pthread_create(&tid[2], NULL, task3, NULL);pthread_join(tid[0], NULL);pthread_join(tid[1], NULL);pthread_join(tid[2], NULL);sem_destroy(&sem_A);sem_destroy(&sem_B);sem_destroy(&sem_C);return 0;
}

三.IPC机制

1.进程间通信:IPC机制

进程间空间独立,无法直接通信,需要IPC机制实现通信。

2.同一主机进程间通信

1)古老的通信方式

无名管道,有名管道

信号:进程间通知机制

2)IPC对象通信system V
共享内存*:效率最高
消息队列
信号量集(信号灯)
主要用在不同主机进程间通信

3)socket通信:
网络通信

3.无名管道:

示例:

4.有名管道:

示例:

补充:

http://www.xdnf.cn/news/1322749.html

相关文章:

  • JAVA经典面试题:数据库调优
  • rust 从入门到精通之变量和常量
  • 从 ORA-12703 到顺利入库:Go + Oracle 11g GBK 字符集踩坑记20250818
  • [免费]基于Python的全国气象数据采集及可视化大屏系统(Flask+request库)【论文+源码+SQL脚本】
  • elasticsearch-集成prometheus监控(k8s)
  • 【LeetCode题解】LeetCode 74. 搜索二维矩阵
  • 【深度长文】Anthropic发布Prompt Engineering全新指南
  • IDE开发系列(2)扩展的IDE框架设计
  • 【音视频】瑞芯微、全志芯片在运动相机和行车记录仪产品分析
  • mybatis连接数据库
  • Kafka 零拷贝(Zero-Copy)技术详解
  • 数据赋能(401)——大数据——持续学习与优化原则
  • RAG 入门指南:从概念到最小系统搭建
  • 基于Android的随身小管家APP的设计与实现/基于SSM框架的财务管理系统/android Studio/java/原生开发
  • 从0-1使用Fastmcp开发一个MCP服务,并部署到阿里云百炼 -持续更新中
  • Flutter 自定义 Switch 切换组件完全指南
  • 深度学习——R-CNN及其变体
  • React diff——差异协调算法简介
  • 【Python面试题】写一个用元类(metaclass)实现API接口自动注册的Demo。以及装饰器在项目中典型应用场景。
  • AI行业应用深度报告:金融、医疗、教育、制造业落地案例
  • 前端环境安装
  • AI 在金融领域的落地案例
  • go语言条件语if …else语句
  • ——链表——
  • 音频算法工程师技能1
  • 调试技巧(vs2022 C语言)
  • 【速通】深度学习模型调试系统化方法论:从问题定位到性能优化
  • 剧本杀小程序系统开发:保障游戏公平,营造健康娱乐环境
  • 蔬菜批发小程序:生产商的数字化转型利器——仙盟创梦IDE
  • 云计算-云上实例部署 RocketChat:Mongodb、主从数据库、Node 环境配置指南