由于为了提高计算机系统资源的利用率,人们引入了多道程序设计技术,逐渐操作系统也慢慢成型,随之而来的问题也出现了,例如计算机系统资源有一些是不允许被同一段时间内被多个进程同时访问的,一个进程的执行需要另外的进程执行完毕,这个进程才可以执行,也就是进程的互斥与同步。
操作系统可以说是管理计算机系统资源,合理的组织工作流程的软件,学习操作系统,不仅能让我们熟悉我们软件开发者的工作平台,也能让我们去学习我们的前辈去决解问题的方法和思路,决解进程的同步与互斥问题的方法中,现在最为行之有效的是信号量机制,以简单信号量为例,需要一个标志系统某资源数目的整型数,一个阻塞队列,一对PV原语。
Int Semaphore//标志系统某资源数目的整型数
Queue;//阻塞队列
P原语伪代码如下:
P(){
屏蔽中断;
Semaphore--;
If(semaphore<0){
Queue.push(当前进程);
}
开中断;
}
V原语伪代码如下:
v(){
屏蔽中断;
Semaphore++;
If(semaphore>=0){
Queue.pop();
}
开中断;
}
现在软件开发中面向对象的方法无疑是主流的开发方法,以不违背人的自然思考为主要优点,备受开发者们喜爱。面向对象中讲究封装,信息隐藏,观察上述代码,完全可以写在一个类中。
我们采用Java代码,因为我比较熟悉!!用线程模拟进程!!
代码如下:
package com.hao.pv;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class PV {
private int semaphore = 0;//整形数
private BlockingQueue<Thread> blockingQueue;//线程阻塞队列
public PV(int semaphore) {//初值
super();
this.semaphore = semaphore