十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
如何实现可重入锁?
创新互联专注于企业全网营销推广、网站重做改版、马龙网站定制设计、自适应品牌网站建设、H5开发、购物商城网站建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为马龙等各大城市提供网站开发制作服务。
实现一个可重入锁需要这两点:
1.记住持有锁的线程
2.统计重入的次数
转自golangroadmap
go语言的map多协程访问时需要加锁
支持==和!=操作就可以做key,实际上只有function、map、slice三个kind不支持作为key,因为只能和nil比较不能和另一个值比较。布尔、整型、浮点、复数、字符串、指针、channel等都可以做key。
struct能不能做key要看每一个字段,如果所有字段都可以做key,那这个struct就可以。有一个字段不能做key,这个struct就不能做key。array也是,元素类型能做key,那这个array就可以。
例如:
type Foo map[struct {
B bool
I int
F float64
C complex128
S string
P *Foo
Ch chan Foo
}]bool
每一个字段都可以做key,Foo就可以做key。再如:
type Foo map[struct {
Fn func() Foo
M map[*Foo]int
S []Foo
}]bool
有一个字段不能做key、Foo就不允许做key,而这三个字段都不能。
字段是递归检查的:
type Foo map[struct {
Sub struct {
M map[*Foo]bool
}
}]bool
Sub的M字段不能做key,Sub就不能做key,Foo也就不能做key。
总之想把一个数据结构用于map的key,就不能包含function、map和slice。
版本过低、网络卡顿。
1、typescript的版本过低,会出现没有go语言的锁的情况,更新版本即可。
2、网络问题出现不稳定就会导致该种情况的出现,更换相对稳定的网络即可。