---
title: "进程间通信的方式"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/cpp-ipc-methods/
type: note
content_role: unspecified
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/02-编程语言与运行时/C++/进程间通信的方式.md"
content_hash: b8809b0a94d6e920e8fc2b0d25262b94b61c748b17f90ed9085e9fc4994dd829
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# 进程间通信的方式

﻿# 进程间通信的方式

> 创建时间：2020/3/20 1:32

参考：
https://www.cnblogs.com/zgq0/p/8780893.html
https://www.cnblogs.com/fmqdblog/p/10680077.html

### 进程间通信方式

```cpp
string str1 = &quot;test&quot;;
string str2 = &quot;test&quot;;

```

命名管道（named pipe/FIFO）：命名管道也是半双工的通信方式，但是它允许无亲缘关系进程间的通信。

信号量（semophonre）：信号量是一个计数器，可以用来控制多个进程队共享资源的访问。它常作为一个锁机制，防止某进程在访问共享资源时，其他进程也访问此资源。因此，主要作为进程间以及同一进程内不同线程之间的同步手段。

消息队列（message queue）：消息队列是由消息的链表，存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少，管道只能承载无格式字节流以及缓冲区大小受限等缺点。

信号（sinal）：信号是一种比较复杂的通信方式，用于通知接受进程某个事件已经发生。

共享内存（shared memory）：共享内存就是映射一段能被其他进程所访问的内存，这段共享内存由一个进程创建，但多个进程都可以访问。共享内存是最快的ipc通信方式，它是针对其他进程间通信方式运行效率低而专门设计的。它往往和其他通信方式如信号量，配合使用来实现进程间的同步和通信。

套接字（socket）：套接字也是一种进程间通信机制，与其他通信机制不同的是，它可用于不同设备间的进程通信。

全双工管道：共享内存、信号量、消息队列、管道和命名管道只适用于本地进程间通信，套接字和全双工管道可用于远程通信，因此可用于网络编程。

### 线程间通信方式

  * **锁机制** ：包括互斥锁、条件变量、读写锁
互斥锁：提供了以排他方式防止数据结构被并发修改的方法。
读写锁：允许多个线程同时共享数据，而对写操作是互斥的。
条件变量：可以以原子的方式阻塞进程，直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
  * **信号量机制（Semaphore）** ：包括无名进程信号量和命名线程信号量
  * **信号机制（Signal）** ：类似进程间的信号处理
