2010-08-25 104 views

回答

5

一般来说,关键区域是一个地方,如果存在两个独立的执行线程,则会出现竞态条件或其他不良影响。信号量是防止两个线程在同一时间点处于关键区域的一种方式。

2

GUARD一次只允许1个线程进入关键区域,而信号量可以允许n个线程(您指定n)同时进入关键区域。

0

还有“临界区”的两种解释:

  1. 的代码,如果由两个线程同时执行,将产生不确定的结果的区域。

  2. 除当前线程以外的所有执行程序隔离的代码区域。这个例子就是一个中断处理程序。这些地区通常被称为“关键部分”。在Intel CPU上,您可以使用CLI/STI指令开始/结束关键部分。

+0

请注意,在虚拟内存的操作系统,CLI/STI可能不足以防范关键部分。如果代码尝试访问不是立即可用的内存页面,则无论是否启用异步中断,都会触发中断。 “期望”是,该中断将从磁盘获取必要页面并返回到正在执行的代码,但硬件中的任何内容都不会阻止操作系统在等待所需页面被读取时执行任何其他线程。 – supercat 2012-11-19 17:19:13

1

当一个进程执行操纵共享数据(或资源)的代码,我们说该方法是在它的关键部(CS)(用于共享数据) 和信号灯使用非负整数变量作为标志和 信号如果和当资源是免费的