golang 关于锁 mutex,踩过的坑
伪代码声明:请无视一些拼写错误 mutex实例无需实例化,声明即可使用 func add ( ) { var mutex sync . Mutex mutex . Lock ( ) defer mutex . Unlock ( ) fmtPrintln ( "test lock" ) } mutex在传递给外部使用的时候,需要传指针,不然传的是拷贝,会引起锁失败。并且指针的mutex是一定要实例化过的。 func add ( ) * sync . Mutex { var m = & sync . Mutex { } return m } 对同一个锁,进行多次锁,会死锁 func a ( ) { var mutex sync . Mutex mutex . Lock ( ) mutex . Lock ( ) // dead lock } 对一个RWLock进行同时Lock()和RLock()会死锁. func a ( ) { var mutex sync . RWMutex mutex . RLock ( ) mutex . Lock ( ) // dead lock } 这意味着如果一个操作函数里同时包含写和读,千万不要这么写 type Object struct { Data [ ] interface { } L sync . RWMutex } func WR ( o