RWMutex の試用
0時に寝て3時半に起きてネットみたてたら6時半になってそれから寝て7時半に起きた。やっぱり生活のリズムがおかしい。
今日の筋トレは腹筋:20x1,腕立て:10x1,スクワット10x1をした。あと1kmほど散歩した。
go の RWMutex を使う⌗
テストツールでちょっとしたプールを実装していて mutex を使うコードを書いた。書き込みはロックしないといけないけど、読み込みはロックする必要がないようなものは RWMutex を使うと普通の Mutex よりは読み込みが並行に動くので効率がよくなる。実際に RWMutex を使ってコードを書いたことがなかったので試しに書いて単体テストを実行して振る舞いを確認してみた。
type pool struct {
l []string
m map[string]struct{}
mu sync.RWMutex
}
func (p *pool) exists(dn *ldap.DN) bool {
p.mu.RLock()
defer p.mu.RUnlock()
_, ok := p.m[dn.String()]
return ok
}
func (p *pool) get() *ldap.DN {
p.mu.RLock()
defer p.mu.RUnlock()
length := len(p.l)
if length == 0 {
return nil
}
s := p.l[rand.Intn(length)]
return mustParseDN(s)
}
func (p *pool) put(dn *ldap.DN) {
p.mu.Lock()
defer p.mu.Unlock()
s := dn.String()
p.l = append(p.l, s)
p.m[s] = struct{}{}
}
4年ぶりの神戸ルミナリエ⌗
たまたま 第29回 神戸ルミナリエ が1月の19日から28日にかけて行われるという記事をみかけた。そう言えば、いつも12月に開催されていたのが今回から1月に変わったみたい。毎年今回が最後みたいな含みをもたせて、なんやらかんやらでもう29回も続いているんやね。今回が第29回だからおそらく来年に第30回もやるのでしょう。「4年ぶりの開催が決定」と書いてあって、あれ?やってなかったっけ?と思ったらコロナ禍のために2020-2023年まで中止という意思決定はされていて、代替イベントとして小さいルミナリエっぽいイルミネーションをやっていたらしい。ルミナリエの展示場となる東遊園地がうちの近所なのでこれまでもやっていたような記憶があるのはそのせいかもしれない。今年は規模を拡張してやるのかな?久しぶりなので時間があるときに観に行ってみようと思う。
Read other posts