keylock

package
v0.6.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 21, 2022 License: MIT Imports: 1 Imported by: 0

README

针对某个key的读写锁

我们常常面对这样的情况,多个go routine可能要访问同一个资源,但这个资源并不一定常驻内存, 换句话说没有固定的资源锁来控制这多个go routine的同步。

KeyLocker

如果将这些资源以某种唯一key的形式组织,那就可以利用一个map来保存这些资源锁了,在使用的时候会从map中获取, 如果没有就在map中新建。使用完了后再检查是否有别的go routine也将使用这个资源锁,如果没有,就可以将资源锁从 map中删除。

用法


var locker = NewKeyLocker()


//读锁
locker.RLock(resource_id)
defer locker.RUnlock(resource_id)

//写锁
locker.Lock(resource_id)
defer locker.Unlock(resource_id)

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type KeyLocker

type KeyLocker struct {
	// contains filtered or unexported fields
}

KeyLocker global locker based on key

func NewKeyLocker

func NewKeyLocker() *KeyLocker

NewKeyLocker new key locker

func (*KeyLocker) Lock

func (d *KeyLocker) Lock(key interface{})

Lock write lock

func (*KeyLocker) RLock

func (d *KeyLocker) RLock(key interface{})

RLock read lock

func (*KeyLocker) RULock

func (d *KeyLocker) RULock(key interface{})

RULock read unlock

func (*KeyLocker) Unlock

func (d *KeyLocker) Unlock(key interface{})

Unlock write unlock

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL