进程间通信 和 线程间同步

原创 2016年05月31日 23:47:05
以前经常搞混,所以记录下来。
进程间通信主要是指多个进程间的数据交互。
而线程间同步主要指维护多个线程之间数据准确、一致性。


一.进程间通信主要有以下几种方式:


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


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


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


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


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


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


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


二.线程间同步主要有以下几种方式:


临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。


互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享 .互斥量比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。


信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目 .信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。


事件:通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作.

相关文章推荐

linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁

Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量、信号量和读写锁。 下面是思维导图: 一、互斥锁(mutex)   锁机制是同一时刻只允许一个线程执行一个关键部分的代码。1 ...

Linux线程间同步机制_条件变量

有时看网上的博客自己会纳闷,进程间的同步机制和线程间的同步机制分别是什么?     其实进程之间是不用同步机制的,因为进程之间资源不共享,不需要同步机制来对所谓的临界资源进行保护,所以通常我们只讨论...

进程间、线程间通信方式小结

之前一直对进程间和线程间的通信方式搞混,今天对它们总结一下。 一、进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。...

线程如何实现同步和通讯

线程同步 什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题。 实现同步机制有两...

线程的三种通信方法与三种同步方式

一、线程之间的通信     通常情况下,一个次级线程要为主线程完成某种特定类型的任务,这就隐含着表示在主线程和次级线程之间需要建立一个通信的通道。一般情况下,有下面的几种方法实现这种通信任务:使用...
  • zhjr1220
  • zhjr1220
  • 2012年10月26日 10:20
  • 13254

进程间同步的方法

进程间同步的方法   2010-05-10 01:03:42|  分类: Linux|字号 订阅 进程间通讯(IPC)方法主要有以下几种:        管道/F...
  • jfkidear
  • jfkidear
  • 2012年07月09日 14:59
  • 11705

多线程教程之二---线程间同步

当多个线程无限制的在同一段时间内访问同一资源时,有可能导致错误的结果的发生,例: #include #include long g_iNum1,g_iNum2; DWORD WINAPI S...

java多线程与线程间通信

本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程的众多常见重要知识点,学习后会对java多线程概念及线程间通信方式有直观清晰的了解和掌握,可以编写并分析简单的多线程程序。 ...

进程间通信与线程间通信

序 今天被问及进程间通信的问题,发现自己了解的并不够,所以,对此好好总结一番~ 操作系统的主要任务是管理计算机的软件、硬件资源。现代操作系统的主要特点是多用户和多任务,也就是程序的并行执行,windo...
  • fly_yr
  • fly_yr
  • 2016年03月24日 11:38
  • 3633

JAVA线程与线程、进程与进程间通信

I.线程与线程间通信 一、多线程间通信方式: 1、共享变量 2、wait/notify机制 3、Lock/Condition机制 二、共享变量 线程间发送信号的一个简单方式是在共享对象的变量里设置信...
  • ls5718
  • ls5718
  • 2016年07月11日 10:54
  • 9459
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程间通信 和 线程间同步
举报原因:
原因补充:

(最多只允许输入30个字)