进程间通讯:

  • 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

  • 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

  • 高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。

  • 信号量( semophore ) :信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

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

  • 信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

  • 共享内存( sharedmemory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

  • 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

注意:临界区则是一种概念,指的是访问公共资源的程序片段,并不是一种通信方式。

线程通讯:

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

提问:互斥锁与信号量的区别?
答:互斥锁用于线程的互斥,信号量用于线程的同步。这是互斥锁和信号量的根本区别,也就是互斥和同步之间的区别。同时互斥锁的作用域仅仅在于线程,信号量可以作用于线程和进程。

多进程、多线程同步(通讯)的方法相关推荐

  1. Delphi关于多线程同步的一些方法

    (注:本文为转载  http://hi.baidu.com/navy1130/blog/item/468fcdc448794fce38db49ee.html) 线程是进程内一个相对独立的.可调度的执行 ...

  2. java多线程同步5种方法

    一.引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊.闲话不多说,进入正题. 二.为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会 ...

  3. DELPHI 多线程同步几种方法

    DELPHI 多线程(TThread类的实现) DELPHI 多线程(TThread类的实现) 之前学习了用API实现,让我们再学习下用DELPHI的TThread类. 先新建一个普通的工程,再新建一 ...

  4. 秒杀多线程第十二篇 多线程同步内功心法——PV操作上

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

  5. 多线程面试题系列(12):多线程同步内功心法——PV操作上

    上面的文章讲解了在Windows系统下实现多线程同步互斥的方法,为了提高在实际问题中分析和思考多个线程之间同步互斥问题的能力,接下来将讲解PV操作,这也是操作系统中的重点和难点.本文将会先简要介绍下P ...

  6. java 多线程间通讯_JAVA多线程间通讯常用实现方法解析

    如何实现线程间通讯,有如下三种方法: 1.使用Semaphore (信号量)类来控制线程的等待和释放 功能:三个线程 a .b .c 并发运行,b,c 需要 a 线程的数据怎么实现 分析:考虑到多线程 ...

  7. C# 网络编程之使用Socket类Send、Receive方法的同步通讯

    经过几天学习,终于解决了再C#网络编程中使用Socket类Send和Receive方法开发的客户端和服务端的同步通讯程序:实现了又客户端想服务器发送消息的界面程序.主要使用的方法是:       1. ...

  8. 从C++20 shared_ptr移除unique()方法浅析多线程同步

    @[TOC](从C++20 shared_ptr移除unique()方法浅析多线程同步) std::shared_ptr的unique()方法做了什么事情? unique()作为std::shared ...

  9. C++实现多线程及其三种方法实现多线程同步

    1.调用windows API实现多线程 #include "stdafx.h" #include <windows.h> #include <stdio.h&g ...

  10. java多线程同步的四种方法_java中实现多线程的两种方法

    java多线程有几种实现方法,都是什么?同步有几种实java中多线程的实现方法有两种:1.直接继承thread类:2.实现runnable接口:同步的实现方法有五种:1.同步方法:2.同步代码块:3. ...

最新文章

  1. 与 SENet 互补提升,华为提出自注意力新机制:Weight Excitation
  2. iis 改了php ini不生效,Windows IIS 集成PHP时修改PHP.ini 配置后不生效问题
  3. JVM常用的参数配置
  4. [見好就收]NET 2.0 - WinForm Control - DataGridView 编程36计
  5. java socket通讯_Java socket通讯实现过程及问题解决
  6. restapi(0)- 平台数据维护,写在前面
  7. C++中的long long和__int64类型(转载)
  8. Oracle数据库to_date()和to_char()的相关
  9. textfilestream_C#里的文件流(FileStream)
  10. 关于SOME/IP的理解
  11. Java线程:新特征-原子量
  12. MySQL实战第二十二讲-MySQL有哪些“饮鸩止渴”提高性能的方法?
  13. Nanopore 纳米孔 测序数据处理 微生物 16S全长 Centrifuge的安装和使用
  14. 隐形窗口_建立网站时要考虑的隐形(但至关重要)注意事项
  15. 太虚幻境 文/江湖一劍客
  16. (Paper)Network in Network网络分析
  17. 大数据平台资源治理经验总结
  18. 用STL进行字符串的分割与合并
  19. php云仓微商源码_微商云仓APP模式系统开发
  20. 用 Node.js 手写一个 DNS 服务器

热门文章

  1. QQ空间注销了——2012年5月22日 23:06:25
  2. [C] 动态内存管理
  3. php 写的日历模板(未连接数据库)
  4. Authentication 和 Authorization 的区别
  5. 飞翔机器人动态壁纸_长臂机器人(HandyBot)官方下载_长臂机器人官方安卓v1.0下载_快吧游戏...
  6. 全球知名“骨灰级”浏览器被中国企业收购,会变成流氓软件吗?
  7. js判断ipad还是安卓_JavaScript判断ios还是android系统
  8. Nacos--概述、安装;注册、配置中心;集群、持久化以及开机自启
  9. 在word中像Latex一样键入公式
  10. 计算机用户如何反馈意见,工程教育认证专家组向我校计算机科学与技术专业反馈意见...