读写锁

读写锁规则:

读写锁拥有两把锁,读锁写锁。读写锁的特点是:同一时刻允许多个线程对共享资源进行读操作;同一时刻只允许一个线程对共享资源进行写操作;当进行写操作时,同一时刻其他线程的读操作会被阻塞;当进行读操作时,同一时刻所有线程的写操作会被阻塞。对于读锁而言,由于同一时刻可以允许多个线程访问共享资源,进行读操作,因此称它为共享锁;而对于写锁而言,同一时刻只允许一个线程访问共享资源,进行写操作,因此称它为排他锁

阻塞试实现:

共享资源:A

type A struct {
    ReadClients []Rcilent
    WriteClient Wclient
    WaitClient  [Rclient1, Rclient2,Wclient1, Rclient3]  

}

 

衍生,非阻塞思想,如果只需要简单判断冲突:

共享资源:A

type A struct {

    IsWrite bool
    ReadNum int  //记录重入数,也就是多少个客户端重入的一个计数器

}

形成规则:

获取A写锁:

func GetWriteLock(a A) bool {
    if !a.IsWrite && a.ReadNum == 0 {
        a.IsWrite = true
        return true
    }
    return false
}

获取A读锁:

func GetReadLock(a A) bool {
    if !a.IsWrite {
        a.ReadNum++
        return true
    }
    return false
}

释放A写锁:

func ReleaseWriteLock(a A)  {
    a.IsWrite = false
}

释放A读锁:

func ReleaseReadLock(a A)  {
    a.ReadNum--
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值