
Linux/AndroidOS中进程间通信&线程间同步
文章平均质量分 87
Linux/Android系统中进程之间的通信/线程之间的同步
小馬佩德罗
业精于勤荒于嬉,行成于思毁于随
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux/AndroidOS中进程间的通信&线程间的同步 -1- IPC方式简介
摘要 本文系统总结了Linux/Android系统中进程间通信(IPC)和线程间同步(ITS)的主要工具与方法。IPC工具分为数据传输(管道、消息队列、socket等)和共享内存两类,前者通过内核中转数据,后者直接共享内存区域实现高速通信。同步工具包括信号量、文件锁和互斥体/条件变量,用于协调进程/线程对共享资源的访问。各类工具在对象标识、功能特性(如消息传递方式、死锁处理等)和适用场景上存在差异。特别指出,只有socket支持网络通信,包括本地的UNIX domain和跨主机的Internet domai原创 2025-04-23 21:55:50 · 938 阅读 · 0 评论 -
Linux/AndroidOS中进程间的通信&线程间的同步 -2- 管道和FIFO
UNIX系统中的管道是一种进程间通信机制,最早出现在20世纪70年代。它允许相关进程(如父子进程)通过单向数据流进行通信。管道在内核中维护一个有限缓冲区,数据写入后立即可以读取,具有顺序性和阻塞特性。创建管道使用pipe()系统调用,返回读写两端文件描述符。典型用法是在fork()后,父进程关闭读端写入数据,子进程关闭写端读取数据。必须关闭未使用的管道描述符以避免死锁和正确识别管道状态。管道常用于shell命令(如ls | wc -l)中连接不同进程的输入输出。示例程序展示了父进程写入字符串,子进程分块读取原创 2025-04-29 20:30:00 · 2051 阅读 · 0 评论 -
Linux/AndroidOS中进程间的通信&线程间的同步 -3- 内存映射
mmap()系统调用在调用进程的虚拟地址空间中创建一个新内存映射。映射分为两种。文件映射:文件映射将一个文件的一部分直接映射到调用进程的虚拟内存中。一旦一个文件被映射之后就可以通过在相应的内存区域中操作字节来访问文件内容了。映射的分页会在需要的时候从文件中(自动)加载。这种映射也被称为基于文件的映射或内存映射文件。匿名映射:一个匿名映射没有对应的文件。相反,这种映射的分页会被初始化为 0。一个进程的映射中的内存可以与其他进程中的映射共享(即各个进程的页表条目指向RAM 中相同分页)。原创 2025-05-06 13:37:15 · 859 阅读 · 0 评论 -
Linux/AndroidOS中进程间的通信&线程间的同步 -4- 虚拟内存操作
介绍在进程的虚拟地址空间上执行操作的各个系统调用。原创 2025-05-06 13:38:07 · 250 阅读 · 0 评论 -
Linux/AndroidOS中进程间的通信&线程间的同步 -5- POSIX IPC
三种 POSIX IPC 机制拥有很多共有特性。下表对它们的 API 进行了总结。原创 2025-05-06 20:00:00 · 1066 阅读 · 0 评论 -
Linux/AndroidOS中进程间的通信&线程间的同步 -6- 信号量
本文将介绍 POSIX 信号量,它允许进程和线程同步对共享资源的访问。POSIX 信号量是一个整数,其值是不能小于 0 的。如果一个进程试图将一个信号量的值减小到小于 0,那么取决于所使用的函数,调用会阻塞或返回一个表明当前无法执行相应操作的错误。一些系统并没有完整地实现 POSIX 信号量,一个典型的约束是只支持未命名线程共享的信号量。只有在 Linux 2.6 以及带 NPTL 的 glibc 上,完整的POSIX 信号量实现才可用。原创 2025-05-07 22:00:00 · 933 阅读 · 0 评论 -
Linux/AndroidOS中进程间的通信&线程间的同步 -7- 共享内存
POSIX 共享内存能够让无关进程共享一个映射区域而无需创建一个相应的映射文件。Linux 从内核 2.4 起开始支持 POSIX 共享内存。Linux 使用挂载于/dev/shm 目录下的专用 tmpfs 文件系统1。这个文件系统具有内核持久性——它所包含的共享内存对象会一直持久,即使当前不存在任何进程打开它,但这些对象会在系统关闭之后丢失。要使用 POSIX 共享内存对象需要完成下列任务。使用 shm_open()函数打开一个与指定的名字对应的对象。原创 2025-05-07 22:30:00 · 1769 阅读 · 0 评论 -
Linux/AndroidOS中进程间的通信&线程间的同步 -8- 消息队列
POSIX 消息队列 API 中的主要函数如下。mq_open()函数创建一个新消息队列或打开一个既有队列,返回后续调用中会用到的消息队列描述符。mq_send()函数向队列写入一条消息。mq_receive()函数从队列中读取一条消息。mq_close()函数关闭进程之前打开的一个消息队列。mq_unlink()函数删除一个消息队列名并当所有进程关闭该队列时对队列进行标记以便删除。上面的函数所完成的功能是相当明显的。此外,POSIX 消息队列 API 还具备一些特别的特性。原创 2025-05-08 21:28:47 · 869 阅读 · 0 评论 -
Linux/AndroidOS中进程间的通信&线程间的同步 -9- 终端/伪终端
在 Linux 系统中,**终端(Terminal)伪终端(Pseudo Terminal,PTY)**是用户与系统交互的重要组件,但它们的概念和实现方式有所不同。原创 2025-05-13 10:57:38 · 429 阅读 · 0 评论