操作系统知识点持续更新

生产者消费者问题

关于生产者消费者问题可以参考这篇文章:生产者消费者问题的java实现

临界区与互斥量

临界区:保证在某一时刻只有一个进程能访问数据的简便方法,在任意时刻值允许一个进程对共享资源进行访问。如果有多个进程试图访问临界区,那么在有一个进程进入后其他进程会被挂起
互斥量:只有拥有互斥对象的进程才有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下次共享资源不会同时被多个进程访问。互斥量比临界区复杂,因为使用互斥不仅能够保证在同一应用程序下不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

同步的解决方案

通常使用管程和信号量来实现进程间的同步

信号量

信号量由整型变量S和两个原子操作组成,S是资源的数量,两个原子操作一般被称为p操作和v操作,为控制一个具有有限数量用户资源而设计。
p操作表示申请一个资源,p操作的定义:S=S-1,若S>=0,则执行p操作的进程继续执行;若S<0,则该进程置为阻塞状态,并将其插入阻塞队列。
v操作表示释放一个资源,v操作的定义:S=S+1,若S>=0.则执行v操作;若S<0,则从阻塞状态唤醒一个进程,并将其插入就绪队列。
信号量在现实生活中可以找到例子,比如银行的窗口数量就是S,在窗口办理业务就是p操作,业务办理结束就是v操作。

管程

是编程语言提供的一种抽象的数据结构,用于多线程互斥访问共享资源。首先,任意时刻只有一个线程执行管程代码;其次,正在管程内的线程可以放弃对管程的控制权。

信号量与管程的区别
  • 信号量本质上是可以共享的资源的数量;而管程是一种抽象的数据结构用来限制同一时刻只有一个线程进入临界区
  • 信号量可以是并发的,并发了取决于S的初始值;而管程内部同一时刻只能有一个线程运行
  • 信号量与资源的管理紧耦合,管程需要自行判断是否还有可共享的资源
  • 信号量的p操作可能阻塞,也可能不阻塞;管程的wait操作一定会阻塞

你可能感兴趣的:(操作系统知识点持续更新)