计算机操作系统零散笔记——关于进程同步

进程的同步

当多个进程同时访问一个资源的情况

文件位置指针

如果同时访问共享数据的话,那就有可能会破坏数据。
生产——消费者问题
听完后发现这里想说的问题学过了,就在我的博客中关于tcpip网络编程复习的第十八篇中有。

我们做到什么能保证不会发生数据破坏
怎么实现
据我所知有俩办法,互斥量和信号量

竞争条件抽象成了临界区。
临界区就是一段代码,这段代码对共享的数据进行访
不是所有的并发访问都有可能破坏数据。

比如下面这种情况:
两个进程,同时输出一个共享变量count,不做加和减的操作,这样的话是绝对不可能对count的值产生破坏的。

只需要保证任意时刻不会有两个或两个以上的进程同时在临界区里面执行。
俩步骤:

1、找出临界区
2、进行保护

保护临界区常见的策略是锁
那怎么样给临界区的保护加锁呢?

其实有一种方法,就是设置以个lock,初始值为0,当值为0的时候可以进入临界区,当要出临界区时值变成1,就这种方式当锁。
我仔细一想,对呀这么简单的一个锁的形式,我怎么没想到呢!

其实这方法是不行的!因为设置的那个lock,它也是个 共 享 资 源!

要符合三个基本要求:

1、互斥条件。
2、进度条件。
3、有限等待。体现一种公平性。

终极方法:只靠软件不太行,这个时候硬件需要登场了。

因为硬件可以控制中断。
关中断
原子硬件指令:

1、Test memory word and set value;
2、Swap contents of two memory words.

第一个比较常见

插播一条知识。原子指令,就是不会被中断的指令,会一直执行到底,没有东西可以阻止他。
下面的是TestAndSet的具体实施

Test and set:
boolean TestAndSet(boolean *target){
	boolean rv = *target;
	*target = TRUE;
	return rv;
}
while(true){
	while(TestAndSet(&lock)) ;
	//critical section
	lock = FALSE;
	//remainder section
}
发布了75 篇原创文章 · 获赞 26 · 访问量 7676

猜你喜欢

转载自blog.csdn.net/qq_40962234/article/details/104239278