操作系统
一、进程间的通信方式
1、pipe管道:场景Linux | 管道命令
2、信号signal:
3、消息队列Message:消息队列建立了一个链表,都是先进先出,消息队列是放在内核中的。只有在内和重启或者显式删除一个消息队列时,该消息队列才会真正被删除。
4、信号量:信号量是一个计数器,用于多进程对共享数据的访问,信号量意图在于进程间的同步。
5、共享内存:使得多个进程可以同时访问同一块内存,不同进程可以看到对方进程对共性内存的数据更新。但这种操作依然需要用互斥锁、信号量等。
6、套接字:在网络请求中使用套接字进行通信,套接字是支持TCP/IP的网络通信基本操作单元。
二、线程间同步的方式
1、互斥量Mutex:采用互斥对象机制
2、信号量:允许同一个资源,在同一时刻被多个线程同时访问。
3、事件:通过通知的方式保持同步,还可以实现多线程优先级。
三、死锁的四个必要条件
1、请求保持
2、循环等待
3、互斥
4、非抢占
四、预防死锁
设置可以抢占,破坏第四个必要条件
释放已有资源,破坏第一个条件
避免循环等待,等待过后,放弃等待。破坏第二个条件
五、避免死锁
可以允许死锁出现,像银行家算法,进行死锁探测,如果是安全状态就分配资源。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)