信号量

信号量

一、是什么?

信号量本质上是一个计数器,用于控制多进程/线程对共享资源的访问。

  • 在进入一个关键代码段之前,必须先获取一个信号量
  • 一旦该关键代码段完成了,必须释放之前获取的信号量

信号量即可以用于同步(如生产者-消费者),也可以用于互斥(二元信号量)。

二、为什么?

 临界区互斥

临界区互斥

一、基本概念

1.1 临界概念

定义:

  • 临界资源:一次仅允许1个进程/线程使用的资源。比如,进程间的共享内存
  • 临界区:对临界资源进行访问的代码片段。比如,进程中对共享内存进行访问的程序片段

1.2 同步

 内核版本

内核版本

主要是Linux内核版本的说明。

一、内核版本号格式

Linux内核版本号的格式可以分为3个阶段:

  • 早期版本,在1.0以前
  • 过渡版本,在1.0 ~ 2.6之间
  • 最新版本,在2.6.0以后

1.1 早期版本

 中介者模式

中介者模式

一、什么是中介者模式?

中介者模式(Mediator Design Pattern):定义一个单独的(中介)对象,来封装一系列对象的交互。将这组对象之间的交互都委派给中介对象,来避免对象之间的直接交互。

英文原文:

Mediator pattern defines a separate (mediator) object that encapsulates the interaction between a set of objects and the objects delegate their interaction to a mediator object instead of interacting with each other directly.

它有几个特点:

  • 一组对象之间存在相互交流的情况,也就是一种网状关系
  • 定义一个上帝(中介)对象,负责中转对象之间的交互,来避免对象之间的直接联系
  • 相当于加了个中间层转换,把网状关系变成了星型关系

中介者模式,也称为调停模式,负责多个对象之间的互相沟通。

 备忘录模式

备忘录模式

一、什么是备忘录模式?

备忘录模式(Memento Desidn Pattern):在不违背封装性原则的前提下,捕获一个对象的内部状态,并在对象之外保存,以便之后恢复对象为先前的状态。

它的几个特点是:

  • 要求不要违背封装性原则
  • 保存的是对象的内部状态,意味着对象外部不应该对保存的数据进行操作,而是假设不知道它的数据结构
  • 保存的数据,相当于快照,可以用于撤销恢复

备忘录模式,也称为快照模式。

 迭代器模式

迭代器模式

一、什么是迭代器模式?

迭代器模式(Iterator Design Pattern):提供一种方式来访问聚合里面的所有元素,而不暴露聚合对象的内部数据结构。

迭代器模式,也称为游标模式,主要用于遍历数据集合。

迭代器模式的几个特点:

  • 目的是为了遍历集合数据
  • 特点是可以避免集合的内部数据结构暴露,增加集合内部实现的灵活性

迭代器是为了遍历集合数据,所以一个完整的迭代器,肯定是包括集合和迭代器2部分。

 职责链模式

职责链模式

一、职责链模式是什么?

职责链模式(Chain of Responsibility Design Pattern):将请求的发送和接收解耦,让多个接收者都有机会处理这个请求。将接收者串联起来,并沿着接收者链传递请求,直到某个接收者能够处理它为止。

英语原文:

Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.

职责链的几个特点:

  • 存在多个接收者可以处理请求
  • 请求只需被某个接收者处理即可
  • 请求也可以被多个接收者处理

职责链的目的在于,找到一个可以处理请求的接收者就好了。

 策略模式

策略模式

一、什么是策略模式?

策略模式(Strategy Design Pattern):定义一系列算法,并将算法封装起来,使得它们可以相互替换。策略模式可以使得算法独立于客户端(即使用算法的地方)。

英语原文:

Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

策略模式有几个特点:

  • 存在多种算法
  • 算法之间可以相互替换,说明它们返回结果的影响是一样的,只是算法内部实现不同
  • 策略独立于客户端,单独实现

比如说,排序功能,排序的结果可能都是一样的,但是可以使用不同的算法,如选择排序、冒泡排序、快速排序等。