空间位置锁定

空间位置锁定将逻辑锁定放在存储器的任何单字节上。 锁定不会更改存储器或影响应用程序对存储器的访问权。 锁是系统记录的一条信息。

空间位置锁提供与互斥 (mutex) 提供的类似的协同锁定。 但是,空间位置锁定在几个方面与互斥对象不同:

  • 您可以直接对其保护的数据使用空间位置锁定。 空间位置锁定不需要应用程序创建和维护其他对象。 应用程序中的正确结果仍取决于正在访问数据的所有线程使用空间位置锁定这一事实。
  • 空间位置锁定允许应用程序协调不同锁定请求类型的使用。 例如,多个线程可以使用空间位置锁定来获取对相同数据的共享锁定。
  • 由于空间位置锁定提供了额外的锁定类型,因此空间位置锁定的所有者概念与互斥对象的所有者概念略有不同。 如果每个所有者都已成功获取共享锁定,那么可以有多个共享锁定的所有者。 要使线程获得互斥锁定,必须解锁所有共享锁定。
  • 空间位置锁定对应用程序的性能影响与对互斥对象的影响不同。 空间位置锁定需要大约 500 个减少的指令集计算机 (RISC) 指令来锁定路径,而不会在其他线程之间发生争用。 互斥对象在同一路径中需要大约 50 个 RISC 指令。 但是,空间位置锁定不需要任何用于创建或删除的指令,而互斥对象需要大约 1000 个用于创建或删除的 RISC 指令。
注: Java™ 无法直接使用空间位置锁定。 空间位置锁定需要使用指针。