下面由golang教程栏目给大家介绍关于golang读写锁,希望对需要的朋友有所帮助!
golang读写锁,其特征在于
读锁:可以同时进行多个协程读操作,不允许写操作
写锁:只允许同时有一个协程进行写操作,不允许其他写操作和读操作
读写锁共有四个方法
rlock:获取读锁
runlock:释放读锁
lock:获取写锁
unlock:释放写锁
使用例子如下
package mainimport ( fmt sync time)var grwlock *sync.rwmutexvar gvar intfunc init() { grwlock = new(sync.rwmutex) gvar = 1}func main() { var wg sync.waitgroup go read(1, &wg) wg.add(1) go write(1, &wg) wg.add(1) go read(2, &wg) wg.add(1) go read(3, &wg) wg.add(1) wg.wait()}func read(id int, wg *sync.waitgroup) { fmt.printf(read coroutine: %d start\n, id) defer fmt.printf(read coroutine: %d end\n, id) grwlock.rlock() fmt.printf(gvar %d\n, gvar) time.sleep(time.second) grwlock.runlock() wg.done()}func write(id int, wg *sync.waitgroup) { fmt.printf(write coroutine: %d start\n, id) defer fmt.printf(write coroutine: %d end\n, id) grwlock.lock() gvar = gvar + 100 fmt.printf(gvar %d\n, gvar) time.sleep(time.second) grwlock.unlock() wg.done()}
以上就是关于golang读写锁的详细内容。