12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
编程知识 时间:2024-12-04 20:28:05
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
在Go语言中,可以使用sync包中的Mutex类型来实现互斥锁,使用sync包中的RWMutex类型来实现读写锁。下面是它们的基本用法示例:互斥锁(Mutex):package mainimport ("fmt""sync")var m
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
在Go语言中,可以使用sync包中的Mutex类型来实现互斥锁,使用sync包中的RWMutex类型来实现读写锁。下面是它们的基本用法示例:
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)}
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()方法释放写锁。11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19