zoukankan      html  css  js  c++  java
  • mutex 锁

    重复解锁引起panic

    mutex 结构

    type Mutex struct {

    state int32

    sema uint32

    }

    Mutex.state 表示互斥锁的状态,比如是否被锁定

    Mutex.sema 表示信号量,协程阻塞等待该信号量,解锁的协程释放信号量从而唤醒等待信号量的协程

    Mutex.state  四种状态

    Locked 表示Mutex 是否已经被锁定 0 没有 1 锁定

    Woken 是否有协程被唤醒 0 没有 1 有协程被唤醒 正在加速过程中

    Starving  是否处于饥饿状态 0 没有 1 饥饿状态 说明有协程阻塞超过了1ms

    Waiter 阻塞等待协程的个数,协程解锁时根据此值来判断是否需要释放信号量。

    2.

    自旋过程

    自旋好处 当加锁失败时不必立即转入阻塞,有一定机会获得锁,这样可避免协程切换。

    满足自旋条件

      1.自旋次数要足够少 通常为4 ,自旋最多4次

      2. CPU核数要大于1

      3.协程调度机制中的Process 的数量要大于1

      4.协程调度机制中的可运行队列必须为空,否则会延迟协程调度

    Mutex 模式

      Normal 模式 默认 满足自旋时可以

      Starving 模式 饥饿模式下不会启动 自旋

     3

     使用defer 避免死锁

     加锁后立即使用defer 对其解锁,可以有效地避免死锁

     加锁和解锁应该成对出现

  • 相关阅读:
    nopcommerce商城系统--文档整理
    浏览器标签页显示图标
    SQL SERVER 查询语句学习:CHARINDEX
    NHibernate3.3.3 学习笔记1
    权限管理UML设计草图
    jquery UI 跟随学习笔记——拖拽(Draggable)
    Unity3d IOS中的IGUI控件
    Unity3d ngui基础教程
    unity3d 幻灯片效果实现
    unity3d 场景间数据传递
  • 原文地址:https://www.cnblogs.com/ithubb/p/14701867.html
Copyright © 2011-2022 走看看