golang 互斥锁和读写锁

本文介绍了Golang中的互斥锁(Mutex)和读写锁(RWMutex)。互斥锁通过Lock和Unlock确保同一时间只有一个协程访问资源,防止死锁。读写锁则允许多个读操作并发,但写操作是互斥的,RLock和RUnlock用于读锁定,Lock和Unlock用于写锁定,确保写操作时无其他读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 互斥锁

先看个例子

func main(){
	fmt.Println("start study golang...... ")

	// 1.声明互斥锁
    var mutex sync.Mutex
	count:=0;
	for r:=0;r<20 ;r++ {
		go func() {
			mutex.Lock()
			count+=1;
			defer mutex.Unlock();
		}()
		time.Sleep(time.Second)
		fmt.Println("the count is : ", count)
	}
}

每个资源都对应于一个可称为 “互斥锁” 的标记,这个标记用来保证在任意时刻,只能有一个协程(线程)访问该资源。其它的协程只能等待。

互斥锁是传统并发编程对共享资源进行访问控制的主要手段,它由标准库sync中的Mutex结构体类型表示。sync.Mutex类型只有两个公开的指针方法,Lock和Unlock。Lock锁定当前的共享资源,Unlock进行解锁。

在使用互斥锁时,一定要注意:对资源操作完成后,一定要解锁,否则会出现流程执行异常,死锁等问题。通常借助defer。锁定后,立即使用defer语句保证互斥锁及时解锁。如下所示:

var mutex sync.Mutex // 定义互斥锁变量 mutex<

04-26 92
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值