并行通常使编程变得复杂,程序员必须防止一个并行活动与其他并行活动相冲突。在多个处理器的系统中,如果一个变量被多个处理器使用,则会出现各自独立运行,并竞争访问内存的情况。这种情况有时会使得程序的最终结果出现错误,因此防止多个处理器共同并行的情况。
因此,引入了多处理器硬件的硬件锁,程序员需要将锁与每个共享项相关联,并使用锁确保在数据项更新的过程中没有其它处理器可以更改。互斥是指处理器必须取得对数据项的独占使用之后才能对其进行更新。因此,如果两个或多个处理器同时试图获得特定的锁,则其中一个处理器获得访问权(即继续执行),而其他处理器会被阻塞。即,硬件确保在任何时候都只能由至多一个处理器持有给定的锁。
当然,使用锁在带来安全执行并行的好处的同时,也带来一些不好的影响:
缺点 | 介绍 |
---|---|
增加程序员的工作 | 不习惯为多处理器编程的程序员很容易忘记锁定共享变量,并且由于不受锁保护的访问可能不是都会导致错误,所有程序的问题会更难以检测。 |
加锁严重降低性能 | 如果K个处理器试图同时访问共享变量,那么硬件会使K-1个处理器保持空闲以等待访问。 |
增加开销 | 由于需要使用单独的指令来获取和释放锁,加锁使得开销增加。 |