{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/cpp-ipc-methods/",
  "atlas": "https://www.pystone.net/?node=cpp-ipc-methods#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/cpp-ipc-methods.md",
  "context": "https://www.pystone.net/notes/cpp-ipc-methods.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:cpp-ipc-methods",
  "slug": "cpp-ipc-methods",
  "title": "进程间通信的方式",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "进程间通信的方式",
  "contentRole": "unspecified",
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "unspecified",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "b8809b0a94d6e920e8fc2b0d25262b94b61c748b17f90ed9085e9fc4994dd829",
  "assets": [],
  "headings": [
    {
      "depth": 1,
      "text": "进程间通信的方式",
      "anchor": "进程间通信的方式",
      "citation": "https://www.pystone.net/notes/cpp-ipc-methods/#%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1%E7%9A%84%E6%96%B9%E5%BC%8F"
    },
    {
      "depth": 3,
      "text": "进程间通信方式",
      "anchor": "进程间通信方式",
      "citation": "https://www.pystone.net/notes/cpp-ipc-methods/#%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1%E6%96%B9%E5%BC%8F"
    },
    {
      "depth": 3,
      "text": "线程间通信方式",
      "anchor": "线程间通信方式",
      "citation": "https://www.pystone.net/notes/cpp-ipc-methods/#%E7%BA%BF%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1%E6%96%B9%E5%BC%8F"
    }
  ],
  "claims": [],
  "outgoing": [],
  "incoming": [
    {
      "id": "note:programming-languages-and-runtimes",
      "title": "编程语言与运行时",
      "url": "https://www.pystone.net/notes/programming-languages-and-runtimes/",
      "atlas": "https://www.pystone.net/?node=programming-languages-and-runtimes#knowledge-atlas",
      "label": "编程语言与运行时",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "C++中的“进程间通信的方式”导航项",
      "citation": "https://www.pystone.net/notes/programming-languages-and-runtimes/#c"
    }
  ],
  "contentMarkdown": "# 进程间通信的方式\n\n﻿# 进程间通信的方式\n\n> 创建时间：2020/3/20 1:32\n\n参考：\nhttps://www.cnblogs.com/zgq0/p/8780893.html\nhttps://www.cnblogs.com/fmqdblog/p/10680077.html\n\n### 进程间通信方式\n\n```cpp\nstring str1 = &quot;test&quot;;\nstring str2 = &quot;test&quot;;\n\n```\n\n命名管道（named pipe/FIFO）：命名管道也是半双工的通信方式，但是它允许无亲缘关系进程间的通信。\n\n信号量（semophonre）：信号量是一个计数器，可以用来控制多个进程队共享资源的访问。它常作为一个锁机制，防止某进程在访问共享资源时，其他进程也访问此资源。因此，主要作为进程间以及同一进程内不同线程之间的同步手段。\n\n消息队列（message queue）：消息队列是由消息的链表，存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少，管道只能承载无格式字节流以及缓冲区大小受限等缺点。\n\n信号（sinal）：信号是一种比较复杂的通信方式，用于通知接受进程某个事件已经发生。\n\n共享内存（shared memory）：共享内存就是映射一段能被其他进程所访问的内存，这段共享内存由一个进程创建，但多个进程都可以访问。共享内存是最快的ipc通信方式，它是针对其他进程间通信方式运行效率低而专门设计的。它往往和其他通信方式如信号量，配合使用来实现进程间的同步和通信。\n\n套接字（socket）：套接字也是一种进程间通信机制，与其他通信机制不同的是，它可用于不同设备间的进程通信。\n\n全双工管道：共享内存、信号量、消息队列、管道和命名管道只适用于本地进程间通信，套接字和全双工管道可用于远程通信，因此可用于网络编程。\n\n### 线程间通信方式\n\n  * **锁机制** ：包括互斥锁、条件变量、读写锁\n互斥锁：提供了以排他方式防止数据结构被并发修改的方法。\n读写锁：允许多个线程同时共享数据，而对写操作是互斥的。\n条件变量：可以以原子的方式阻塞进程，直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。\n  * **信号量机制（Semaphore）** ：包括无名进程信号量和命名线程信号量\n  * **信号机制（Signal）** ：类似进程间的信号处理\n"
}
