Go语言中的互斥锁和读写锁怎么使用
在Go语言中,可以使用sync包中的Mutex类型来实现互斥锁,使用sync包中的RWMutex类型来实现读写锁。下面是它们的基本用法示例:
- 互斥锁(Mutex):
package mainimport ("fmt""sync")var mutex sync.Mutexvar count intfunc increment() {mutex.Lock()defer mutex.Unlock()count++}func main() {for i := 0; i < 10; i++ {go increment()}// 等待所有goroutine执行完毕mutex.Lock()defer mutex.Unlock()fmt.Println(count)}
- 读写锁(RWMutex):
package mainimport ("fmt""sync")var rwMutex sync.RWMutexvar data map[string]stringfunc readData(key string) {rwMutex.RLock()defer rwMutex.RUnlock()fmt.Println(data[key])}func writeData(key, value string) {rwMutex.Lock()defer rwMutex.Unlock()data[key] = value}func main() {data = make(map[string]string)writeData("key1", "value1")for i := 0; i < 10; i++ {go readData("key1")}// 等待所有goroutine执行完毕rwMutex.Lock()defer rwMutex.Unlock()for k, v := range data {fmt.Println(k, v)}}
在使用互斥锁和读写锁时,需要注意以下几点:
互斥锁适用于读写互斥的情况,读写锁适用于读多写少的情况。对于互斥锁,使用Lock()方法获取锁,使用Unlock()方法释放锁。对于读写锁,使用RLock()方法获取读锁,使用RUnlock()方法释放读锁;使用Lock()方法获取写锁,使用Unlock()方法释放写锁。上一篇:Fortran语法结构是怎样的
go语言
winlogins.exe是什么文件?winlogins.exe是不是病毒
winsock2.6.exe是什么文件?winsock2.6.exe是不是病毒
WinDefendor.dll是什么文件?WinDefendor.dll是不是病毒
系统目录是什么文件?系统目录是不是病毒
wholove.exe是什么文件?wholove.exe是不是病毒
winn.ini是什么文件?winn.ini是不是病毒
w6oou.dll是什么文件?w6oou.dll是不是病毒
winduxzawb.exe是什么文件?winduxzawb.exe是不是病毒
wuammgr32.exe是什么文件?wuammgr32.exe是不是病毒
windiws.exe是什么文件?windiws.exe是不是病毒