锁的分类

  1. 从线程是否需要锁定同步资源,分为
    乐观锁(互斥同步锁)
    – 可以简单理解为通常需要版本号控制
    – 举例:如git push
    – 适合:并发多读少写的情况
    悲观锁(非互斥同步锁)
    – 修改数据时把数据锁住别的线程无法访问改变
    – 缺点:可能会导致永久阻塞
    – 举例:如数据库select xxx for update
    –适合:临界区有IO操作、代码复杂、竞争激烈,并发多写入,避免大量自旋锁消耗。
  2. 多线程下是否可以共享一把锁,分为
    共享锁
    独占锁
  3. 多线程下是否需要排队,分为
    公平锁
    非公平锁
  4. 等待资源是是否自阻塞,分为
    自旋锁
    非自旋锁
  5. 同一个线程是否可以重复获得一把锁,分为
    可重复锁
    不可重复锁
  6. 是否可中断
    可中断锁
    不可中断锁
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章