我們知道媳纬,golang自帶的mutex實(shí)現(xiàn)非常精巧双肤,性能也很出色。對(duì)實(shí)現(xiàn)原理感興趣的同學(xué)可以參見這篇文章钮惠,https://purewhite.io/2019/03/28/golang-mutex-source/茅糜。
mutex是一個(gè)很輕量的實(shí)現(xiàn),并不能滿足所有場景的需求素挽。比如常見的取鎖超時(shí)蔑赘,mutex是不支持的。前兩個(gè)月自己實(shí)現(xiàn)了一個(gè)版本预明,昨天把它放github上了缩赛,https://github.com/JasonYuan/cmutex。
取名為cmutex撰糠,意思是支持context的mutex酥馍,通過傳入context,可以完成取鎖超時(shí)阅酪,主動(dòng)cancel等操作旨袒。除此之外,還提供了類似于java鎖的Trylock方法术辐,這個(gè)需求其實(shí)很早就有人提了issue砚尽,不知道為啥官方到現(xiàn)在都沒有提供,https://github.com/golang/go/issues/6123辉词。
實(shí)現(xiàn)上必孤,普通鎖很簡單,通過一個(gè)channel即可完成较屿,讀寫鎖稍微復(fù)雜一些隧魄,但也就是兩個(gè)channel,幾十行代碼的事情隘蝎,實(shí)現(xiàn)還算清爽,歡迎大家圍觀和提意見襟企。
另嘱么,這個(gè)包已經(jīng)應(yīng)用在生產(chǎn)中一兩個(gè)月,單元測試也比較完備顽悼,請(qǐng)大家放心使用曼振。