-
互斥锁(Mutex lock)
互斥锁充当资源周围的保护性屏障。 互斥锁是一种信号量,它一次只能授予对一个线程的访问权限。 如果正在使用互斥锁,而另一个线程试图获取该互斥锁,则该线程将阻塞,直到该互斥锁被其原始持有者释放为止。 如果多个线程竞争同一个互斥锁,则一次只能访问一个。 -
递归锁(Recursive lock)
递归锁是互斥锁的一种变体。 递归锁允许单个线程在释放它之前多次获取该锁。 其他线程将保持阻塞状态,直到锁的所有者以获取锁的相同次数释放锁。 递归锁主要在递归迭代期间使用,但也可能用于每种方法都需要分别获取锁的情况。 -
读写锁(Read-write lock)
读写锁也称为共享独占锁。 这种类型的锁通常用于较大规模的操作,如果频繁读取受保护的数据结构并且仅偶尔进行修改,则可以显着提高性能。 在正常操作期间,多个读取器可以同时访问数据结构。 但是,当线程要写入结构时,它将阻塞,直到所有读取器都释放锁为止,此时,它获取了锁并可以更新结构。 当写入线程正在等待锁定时,新的读取器线程将阻塞,直到写入线程完成。 系统仅支持使用POSIX线程的读写锁。 -
分布式锁(Distributed lock)
分布式锁在进程级别提供互斥访问。 与真正的互斥锁不同,分布式锁不会阻止进程或阻止其运行。 它仅报告锁繁忙的时间,并让进程决定如何进行。 -
自旋锁(Spin lock)
自旋锁反复轮询其锁定条件,直到该条件变为true。 自旋锁最常用于锁的预期等待时间较短的多处理器系统上。 在这些情况下,轮询通常比阻塞线程更有效,这涉及到上下文切换和线程数据结构的更新。 由于其轮询性质,该系统不提供自旋锁的任何实现,但是您可以在特定情况下轻松实现它们。 -
双重检查锁(Double-checked lock)
双重检查锁是通过在获取锁之前测试锁定条件来减少获取锁的开销的尝试。 由于双重检查的锁可能不安全,因此系统不会为它们提供明确的支持,因此不建议使用它们。
网友评论