进程通信与线程同步

一  进程通信

进程通信是指进程之间信息的交换。当进程之间需要传送大量数据时,需要利用操作系统提供的高级通信工具。其中windows和linux系统有不同的通信工具。

windows:管道、共享内存、消息队列、socket。

linux:管道、信号、消息队列、共享内存、socket。

(1)管道

管道连接一个读进程和一个写进程以及实现两个进程通信的一个共享文件(管道)。写进程向管道中输入字符流数据,读进程从管道中读字符流数据。为了协调通信,管道必须提供互斥、同步以及确认对方是否存在的机制。

(2)共享内存

在内存中划出一块共享区域,通信进程可以通过读或者写共享区进行进程之间的通信。还有一种方式是基于共享的数据结构,即定义一个共享数据结构,通信进程之间共用这个数据结构。

(3)消息队列

建立一个消息的链表,有足够权限的进程可以向队列中添加消息,被赋予读权限的进程可以从进程中读走队列的消息。

(4)socket

主要用于网络中两个进程之间通信。通信双方豆被分配了一个套接字。一个属于发送进程,一个属于接收进程。每个套接字都有一个唯一的套接字号,可以确保通信双方逻辑链路的唯一性。

二 线程同步

首先说明一下我个人对于通信和同步的理解。不论是进程还是线程,都涉及到同步和通信。我个人认为,通信是指两个进程或者线程之间交换信息,而进程同步或者线程同步,在本质上其实也是一种通信。因此同步和互斥都属于通信的范畴。只不过通信一般是指大量数据的交换,可称为高级通信;而同步属于一种低级通信。以信号量机制来说明其低级表现在:

(1)效率低。每次交换的消息只有一个。

(2)通信对用户不透明。需要程序员自己去实现同步和互斥机制以及数据的传送。

线程通信方式主要有:临界区、互斥量、信号量、事件。

(1)临界区

确保在某一时刻只有一个线程可以访问数据的简便方法。在任意时刻只允许一个线程对临界资源进行访问。多个线程同时访问临界区时,只有一个线程可以进入临界区,其它线程线程将会被挂起,直到进入临界区的线程离开。临界区被释放后,其它线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。

(2)互斥量

只有拥有互斥对象的线程才具备访问资源的权限。由于互斥对象只有一个,因此只有当拥有互斥对象的线程释放对象后,其它线程才可以获得互斥对象并访问资源。互斥量使用范围广,可以在同一进程中的线程之间,也可以在不同进程中的线程之间。

(3)信号量
信号量用于多个线程共享资源的情况。允许多个线程同时访问资源,但是需要设立一个访问共享资源的最大数目。在创建信号量时,就要设置可以访问共享资源的线程最大数目,将该数目设为当前可用资源计数值。每增加一个线程对共享资源的访问,当前可用资源计数就会减1。只要当前可用资源计数大于0,就可以发出信号量。当线程离开共享资源时,将当前了用资源计数加1。

(4)事件

事件对象能够通过通知操作的方式来保持线程的同步,并可以实现不同京城中线程的同步。

参考文献:

计算机操作系统 ;

VC++深入详解 ;

深入理解计算机操作系统。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值